我正在关注一个 pytorch 教程,其中对于形状为 [8,3,32,32] 的张量,其中 8 是批量大小,3 是通道数,32 x 32,像素大小,它们定义了第一个卷积层作为 nn.Conv2d(3, 16, 5 ),其中 3 是输入大小,16 是输出大小,5 是内核大小,它工作正常。
in_size = 3
hid1_size = 16
hid2_size = 32
out_size = len(labels)
k_conv_size = 5
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.layer1 = nn.Sequential(
nn.Conv2d(in_size, hid1_size, k_conv_size ),
nn.BatchNorm2d(hid1_size),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2))
self.layer2 = nn.Sequential(
nn.Conv2d(hid1_size, hid2_size, k_conv_size),
nn.BatchNorm2d(hid2_size),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2))
self.fc = nn.Linear(hid2_size * k_conv_size * k_conv_size, out_size)
def forward(self, x):
out = self.layer1(x)
out = self.layer2(out)
out = out.reshape(out.size(0), -1)
out = self.fc(out)
return out
我将输出大小从 16 更改为 32,将下一层的输出大小从 32 更改为 64,它仍然有效。但是当我调整张量的大小以具有 [8, 3, 64, 64] 的形状时,它会抛出一个不匹配错误,说size mismatch, m1: [16 x 5408], m2: [800 x 4]
我理解 m2 是它所期望的,而 m1 是我给出的。
但我不明白 m2 和 m1 的值来自哪里以及如何相应地更改 hid1_size 。
在构建规则线性层时,我了解输入数据的形状与第一层中的神经元之间的关系,但是如何定义输入的形状与 cnns 中卷积层产生的通道数之间的关系?