**引言:**在采用深度学习模型训练和打比赛的过程中,我们经常需要用到不同的模型,而调整模型的时候,经常会遇到模型结构
不匹配的报错情况如下所示:
return F.linear(input, self.weight, self.bias)
RuntimeError: mat1 and mat2 shapes cannot be multiplied (30x2048 and 512x2)
按照字面翻译是运行时错误:mat1和mat2形状不能相乘,很多人看到这一头雾水,为啥FC层会涉及到乘法运算呢?
假设我们定义的Pytorch模型如下所示,很显然如果用到Resnet和Resnext这两个模型,他们最后面的FC全连接层的参数肯定是不一样的,因而会产生上述报错的原因主要就是当前网络结构输出的神经元数和设置的神经元不匹配,因此需要重新设置fc层的神经元数。
####################################################################################################
cls_num = 4
class XunFeiNet(nn.Module):
def __init__(self):
super(XunFeiNet, self).__init__()
model = models.resnext50_32x4d(True)
model.avgpool = nn.AdaptiveAvgPool2d(1)
model.fc = nn.Linear(512, 2)
self.Resnext = model
def forward(self, img):
out = self.Resnext(img)
return out
######################################################################
####################################################################################################
cls_num = 4
class XunFeiNet(nn.Module):
def __init__(self):
super(XunFeiNet, self).__init__()
model = models.resnext50_32x4d(True)
model.avgpool = nn.AdaptiveAvgPool2d(1)
model.fc = nn.Linear(2048, 2)
self.Resnext = model
def forward(self, img):
out = self.Resnext(img)
return out
######################################################################