尝试训练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)。输出大小太小
不确定该错误是什么意思,应该在哪里修复?
答案 0 :(得分:3)
您的[avg_pool
]层期望其输入大小为(至少)32x32,因为为此层定义的内核大小为32。
但是,在给定输入大小的情况下,该池化图层获得的要素地图的大小仅为7x7。对于32位内核而言,这个值太小了。
您应该增加输入大小,或为avg_pooling
层定义更小的(例如7)内核大小。