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层面的问题。

0
0

PyTorch入门到进阶 实战计算机视觉与自然语言处理项目

理论基础+技术讲解+实战开发,快速掌握PyTorch框架

1214 学习 · 298 问题

查看课程