首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在预加载的火炬视觉模型中找到图层的名称?

如何在预加载的火炬视觉模型中找到图层的名称?
EN

Stack Overflow用户
提问于 2021-08-25 14:31:37
回答 1查看 293关注 0票数 0

我试图使用GradCAM与从torchvision预装的Deeplabv3 resnet50模型一起使用,但是在Captum中,我需要说出层的名称(nn.module类型)。我找不到任何文档来说明这是如何实现的,是否有人对如何获得最终ReLu层的名称有任何想法?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 14:39:39

您可以查看它的表示,并通过简单地打印它来了解它的位置:

代码语言:javascript
复制
>>> model = torchvision.models.segmentation.deeplabv3_resnet50()
>>> model
DeepLabV3(
  (backbone): IntermediateLayerGetter(
    (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (relu): ReLU(inplace=True)
    (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
    (layer1): Sequential(
      (0): Bottleneck(
        ...

要获得该层的确切名称,您可以使用named_modules循环这些模块,并只选择nn.ReLU层:

代码语言:javascript
复制
>>> relus = [name for name, module in model.named_modules() if isinstance(module, nn.ReLU)]

>>> relus
['backbone.relu',
 'backbone.layer1.0.relu',
 'backbone.layer1.1.relu',
 'backbone.layer1.2.relu',
 'backbone.layer2.0.relu',
 'backbone.layer2.1.relu',
 'backbone.layer2.2.relu',
 'backbone.layer2.3.relu',
 'backbone.layer3.0.relu',
 'backbone.layer3.1.relu',
 'backbone.layer3.2.relu',
 'backbone.layer3.3.relu',
 'backbone.layer3.4.relu',
 'backbone.layer3.5.relu',
 'backbone.layer4.0.relu',
 'backbone.layer4.1.relu',
 'backbone.layer4.2.relu',
 'classifier.0.convs.0.2',
 'classifier.0.convs.1.2',
 'classifier.0.convs.2.2',
 'classifier.0.convs.3.2',
 'classifier.0.convs.4.3',
 'classifier.0.project.2',
 'classifier.3']

那就选最后一个:

代码语言:javascript
复制
>>> relus[-1]
'classifier.3'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68924829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档