【问题标题】:Implementation of VGG16 on Pytorch giving size mismatch error在 Pytorch 上实现 VGG16 给出大小不匹配错误
【发布时间】:2019-08-04 08:19:29
【问题描述】:

我在 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 上运行。 请提出建议。

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

【问题讨论】:

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


    【解决方案1】:

    这可能是相反的方式。事情在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:大小不匹配,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])
    

    【讨论】:

    • 是的......对不起,我刚刚检查过......我在写作时错误地互换了版本号......感谢您的回答:)
    猜你喜欢
    • 2018-07-22
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多