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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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