PyTorch 初学者:RuntimeError: 尺寸不匹配,m1: [16 x 2304000],m2: [600 x 120]

我是一个PyTorch和神经网络的新手,现在有点卡住了。

我有这样一个CNN架构:

class ConvNet(nn.Module):    def __init__(self, num_classes=10):        super(ConvNet, self).__init__()        self.conv1 = nn.Conv2d(            in_channels=3,             out_channels=16,             kernel_size=3)        self.conv2 = nn.Conv2d(            in_channels=16,             out_channels=24,             kernel_size=4)        self.conv3 = nn.Conv2d(            in_channels=24,             out_channels=32,             kernel_size=4)        self.dropout = nn.Dropout2d(p=0.3)        self.pool = nn.MaxPool2d(2)        self.fc1 = nn.Linear(600, 120)        self.fc2 = nn.Linear(512, 10)        self.final = nn.Softmax(dim=1)    def forward(self, x):        # 卷积3层        x = F.max_pool2d(F.relu(self.conv1(x)), 2)  # 卷积层的输出        x = self.dropout(x)        x = F.max_pool2d(F.relu(self.conv2(x)), 2)  # 卷积层的输出        x = self.dropout(x)        x = F.max_pool2d(F.relu(self.conv3(x)), 2)  # 卷积层的输出        x = self.dropout(x)        # 线性层        x = F.interpolate(x, size=(600, 120))        x = x.view(x.size(0), -1)        x = self.fc1(x)         return x

但是当我尝试用我的图像进行训练时,它不起作用,并且我遇到了这个错误:

RuntimeError: 尺寸不匹配,m1: [16 x 2304000],m2: [600 x 120]

我想添加第二个线性层(self.fc2)以及最终的SoftMax层(self.final),但由于我在第一个线性层就卡住了,我无法取得任何进展。


回答:

self.fc1的输入维度需要与你扁平化张量的特征(第二个)维度相匹配。因此,不要使用self.fc1 = nn.Linear(600, 120),你可以将其替换为self.fc1 = nn.Linear(2304000, 120)

请记住,因为你使用的是全连接层,模型不能是输入尺寸不变的(与全卷积网络不同)。如果你在x = x.view(x.size(0), -1)之前更改了通道或空间维度的大小(就像你从上一个问题移动到这个问题时所做的那样),self.fc1的输入维度将需要相应地更改。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注