RuntimeError:给定输入大小:(10x7x7)。计算的输出大小:(10x0x0)。输出尺寸太小

时间:2019-12-19 07:27:30

标签: python image-processing computer-vision conv-neural-network pytorch

尝试训练mnist 28x28x1图片

我的模特是

   def __init__(self):
        super(CNN_mnist, self).__init__()
        self.conv = nn.Sequential(
            # 3 x 128 x 128
            nn.Conv2d(1, 32, 3, 1, 1),
            nn.BatchNorm2d(32),
            nn.LeakyReLU(0.2),

            # 32 x 128 x 128
            nn.Conv2d(32, 64, 3, 1, 1),
            nn.BatchNorm2d(64),
            nn.LeakyReLU(0.2),

            # 64 x 128 x 128
            nn.MaxPool2d(2, 2),

            # 64 x 64 x 64
            nn.Conv2d(64, 128, 3, 1, 1),
            nn.BatchNorm2d(128),
            nn.LeakyReLU(0.2),

            # 128 x 64 x 64
            nn.Conv2d(128, 256, 3, 1, 1),
            nn.BatchNorm2d(256),
            nn.LeakyReLU(0.2),

            # 256 x 64 x 64
            nn.MaxPool2d(2, 2),

            # 256 x 32 x 32
            nn.Conv2d(256, 10, 3, 1, 1),
            nn.BatchNorm2d(10),
            nn.LeakyReLU(0.2)
        )
        # 256 x 32 x 32
        self.avg_pool = nn.AvgPool2d(32)
        # 256 x 1 x 1
        self.classifier = nn.Linear(10, 10)

    def forward(self, x):
        features = self.conv(x)
        flatten = self.avg_pool(features).view(features.size(0), -1)
        output = self.classifier(flatten)
        return output, features

我收到以下错误

  

RuntimeError:给定输入大小:(10x7x7)。计算的输出大小:   (10x0x0)。输出大小太小

不确定该错误是什么意思,应该在哪里修复?

1 个答案:

答案 0 :(得分:3)

您的[avg_pool]层期望其输入大小为(至少)32x32,因为为此层定义的内核大小为32。
但是,在给定输入大小的情况下,该池化图层获得的要素地图的大小仅为7x7。对于32位内核而言,这个值太小了。

您应该增加输入大小,或为avg_pooling层定义更小的(例如7)内核大小。