问题背景
将训练好的图片分类vgg模型用到新的数据集上进行图片分类的时候出现了以下问题:
解决方法
结合VGG的网络架构:
发现池化层的输出张量为51277,对应报错的512*49,其无法与第一个全连接层FC1的权重系数相乘,继而和bias相加作为FC1的输出。但是在输出到全连接层之前,网络的forward函数中应当定义输入张量的处理过程,查看在VGG模型类的定义中:
存在x = torch.flatten(x, 1)
存在展成一位张量效果的命令,再加上x = x.view(-1, 512*7*7)
将将池化层的张量展成一维的命令,网络就跑通了。
这个是pytorch包里面自带的文件,之前使用用vgg=models.vgg19(pretrained='True')
,再进行微调和训练也没有报错,但是这次确突然报错了,不知道是什么原因。记录一下踩坑之路,踩坑经验++(smile~)