繁体   English   中英

VGG16 在 Pytorch 上的实现给出了大小不匹配错误

[英]Implementation of VGG16 on Pytorch giving size mismatch error

我在 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)运行代码时,它给了我以下错误消息

运行时错误:大小不匹配,m1:[30 x 512],m2:[25088 x 128]

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

我是否遗漏了什么,还是因为 Pytorch 和 Torchvision 中的某些版本不匹配? 两者,我都在 Python 3.6 上运行。 请建议。

[更新:错误地交换了错误案例和无错误案例的版本号。 感谢@Manoj Mohan 指出]

大概是反过来吧。 事情在 torchvision 0.2.2 上完美运行,但在 torchvision 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: size mismatch, m1: [1 x 512], m2: [25088 x 4096] at /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])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM