源码地址:https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
注意torchvision版本,之前的版本如0.2.0中,self.avgpool=nn.AvgPool2d(7, stride=1),这样的话输入就限定为224*224了,但是版本0.4.0中,就是self.avgpool=nn.AdaptiveAvgPool2d((1,1)),输入可以是32的任何倍数。
类Resnet(nn.Module)
1.forward函数
2.__init__函数
注意:这里的nn.AdaptiveAvgPool2d((1,1))表示做了全局平均池化,(1,1)为输出的特征图大小,经过这一层后得到的Tensor的形状为(batch_size, channels, 1, 1),于是需要拉平为(batch_size, channels),再建立全连接层。
torch.flatten(x,1)为把x从dim=1开始拉平,从而结果只有dim=0和dim=1了。
实现resnet34
3.函数resnet34
备注:resnet34中的34应该是指不含max pooling和avg pooling的网络层数(conv + fc),34 = 1+(3+4+6+3)*2 +1