我在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指出来]
答案 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])