【发布时间】:2021-08-04 18:51:22
【问题描述】:
我在这里指的是这个实现:
https://github.com/hszhao/semseg/blob/master/model/pspnet.py
在第 49-58 行,作者写道:
for n, m in self.layer3.named_modules():
if 'conv2' in n:
m.dilation, m.padding, m.stride = (2, 2), (2, 2), (1, 1)
elif 'downsample.0' in n:
m.stride = (1, 1)
for n, m in self.layer4.named_modules():
if 'conv2' in n:
m.dilation, m.padding, m.stride = (4, 4), (4, 4), (1, 1)
elif 'downsample.0' in n:
m.stride = (1, 1)
这些循环到底发生了什么?
我的理解是,作者正在创建一个 resnet 模型(他的 resnet.py 这里是 https://github.com/hszhao/semseg/blob/master/model/resnet.py),然后调用不同的层,他在他的 resnet 类中实现了这些层以将它们转发到下面。
resnet.py 中的 layer3 和 layer4 是通过调用函数 def _make_layer(self, block, planes, blocks, stride=1): 生成的,所以我假设在循环中使用 .named_modules() 时,它正在循环通过这个 def _make_layer 函数中的模块,是吗?如果是这样,elif 部分会发生什么?没有模块,称为 downsample.0 ? (唯一的模块是 nn.Conv2d 和 nn.BatchNorm2d)
【问题讨论】:
标签: python python-3.x pytorch resnet