Resnet中关于stride计算的问题
来源:6-10 PyTorch搭建cifar10训练脚本搭建-ResNet结构(下)

小马小灰灰
2022-06-16
在课程代码的resnet.py中,
def make_layer(self, block, channels, num_blocks, stride):
strides = [stride] + [1] * (num_blocks - 1) # strides=[1,1]
layers = []
for stride in strides:
layers.append(block(self.inchannel, channels, stride))
self.inchannel = channels
return nn.Sequential(*layers)
def make_layer(self, block, out_channel, stride, num_block):
layers_list = []
for i in range(num_block):
if i == 0:
in_stride = stride
else:
in_stride = 1
layers_list.append(
block(self.in_channel,
out_channel,
in_stride))
self.in_channel = out_channel
return nn.Sequential(*layers_list)
请问这里的stride为什么要这样计算?这两种方法对应的stride计算为什么不一样?最后影响的结果有什么区别?希望有图能帮我说明一下。谢谢。
写回答
1回答
-
会写代码的好厨师
2022-07-19
实现方式可以有差异,要把代码展开来看。stride的目的是为了控制卷积核操作什么时候进行下采样,在哪一层进行下采样。不用纠结实现方式。这个是coding层面的问题。
00
相似问题