python - 在 Pytorch 上实现 VGG16 给出大小不匹配错误

标签 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: size mismatch, 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 上运行失败。

在 0.2.2 中使用 AdaptiveAvgPool2d 的变化是您看不到错误的原因。 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)

运行时错误:大小不匹配,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])

关于python - 在 Pytorch 上实现 VGG16 给出大小不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55145561/

相关文章:

python-2.7 - 在dlib中获取检测到的人脸概率

Python:从该类内部对作为该类数据成员的函数进行多处理的有效解决方法

Python 碎片 : 400 response from Form Request

python - 如何在 Keras 中组合两个具有不同输入大小的 LSTM 层?

ubuntu - 安装EASGD Torch luarocks 模块找不到libmpiT.so?

javascript - 为什么这个 Jsfiddle 不起作用 : tracking. js 人脸检测示例

machine-learning - 如何使用卷积网络将图像分类为 'not categorized image'

machine-learning - 使用图像和其他特征进行分类

python - 为什么我的神经网络成本不断增加?

python multiprocessing.pool.map,将参数传递给生成的进程