事情的起因是这样的:这段时间需要查看一下网络内部的具体工作方式,所以需要重新使用cifar10训练一个网络。正好前两天读了一下resnet在pytorch中的官方实现,发现其中用了一个AdaptiveAvgPool2d导致网络输入可以被视为任意的,因此我直接用torchvision.models定义的resnet18进行训练。开始一切都很顺利,但是过拟合严重,正确率到55%左右,loss再降但是acc就不升高了。我以为是我的参数没对,找到【Pytorch】ResNet-18实现Cifar-10图像分类进行测试。真香,人家代码就是好。但是我进一步发现不对啊,我的代码换成他的参数,还是不对(实测效果好不少,但是训练不稳定,而且收敛速度远远慢于它)。难道是模型有问题? 换了模型,真香too,人家的模型真好用。不过官方给我的resnet18难道有错???然后在滚滚暖风(容易困)下我开始了模型内部的掉坑,爬出坑,把坑填上土的工作(其实我现在还没填上,只知道我掉到哪个坑了)。 最开始我通过:
for name, value in model.named_parameters():
print('name: {0},\t grad: {1}'.format(name, value.requires_grad))
查看每一层的情况。为什么用这段代码?直接打印出网络,输出太多,不好看(其实是暖风吹得想睡觉,懒得看)。

from torchsummary import summary
summary(model, (3, 32, 32))
没装这个工具的话,pip很快就能装好。打印一看,我就说机智如我(瞎猫碰上了死耗子)果然模型结构不对。
