在Pytorch上实现VGG16,产生大小不匹配错误

时间:2019-03-13 15:28:14

标签: python deep-learning computer-vision conv-neural-network pytorch

我在PyTorch上的代码实现的摘要是:

model = models.vgg16(pretrained = False)
classifier = nn.Sequential(
        nn.Linear(25088, 128),
        nn.ReLU(True),
        nn.Dropout(),
        nn.Linear(128, 128),
        nn.ReLU(True),
        nn.Dropout(),
        nn.Linear(128, 20)
)
model.classifier = classifier

我正在输入输入尺寸(60x60x3)和batch_size = 30的图像。

当我从Linux(Ubuntu)终端(使用PyTorch版本:1.0.0,Torchvision版本:0.2.1)运行代码时,它给了我以下错误消息:

  

RuntimeError:大小不匹配,m1:[30 x 512],m2:[25088 x 128]

当我在Windows上从Spyder(Anaconda)(带有PyTorch版本:1.0.1,Torchvision版本:0.2.2)运行它时,它运行完美

我是否缺少某些内容,或者是因为Pytorch和Torchvision中的某些版本不匹配?两者都在Python 3.6上运行。 请提出建议。

[ UPDATE :错误地将版本号替换为错误情况和无错误情况。感谢@Manoj Mohan指出来]

1 个答案:

答案 0 :(得分:1)

这可能是另一回事。事情在火炬视觉0.2.2上完美运行,而在火炬视觉0.2.1上失败。

这种使用AdaptiveAvgPool2d的更改(进入0.2.2)的原因是您看不到该错误。 https://github.com/pytorch/vision/commit/83b2dfb2ebcd1b0694d46e3006ca96183c303706

>>> import torch
>>> model = models.vgg16(pretrained = False)
>>> x = torch.randn(1,3,60,60) # random image
>>> feat = model.features(x)
>>> flat_feat = feat.view(feat.size(0), -1) # flatten
>>> flat_feat.shape
torch.Size([1, 512])
>>> model.classifier(flat_feat)

RuntimeError:大小不匹配,m1:[1 x 512],m2:[25088 x 4096],位于/pytorch/aten/src/TH/generic/THTensorMath.cpp:940

您看到尺寸不匹配的错误。之后,采用自适应平均池,一切正常。

>>> import torch.nn.functional as F
>>> avg = F.adaptive_avg_pool2d(feat, (7,7))
>>> avg = avg.view(avg.size(0), -1)
>>> output = model.classifier(avg)
>>> output.shape
torch.Size([1, 1000])