我该如何解决这个问题?
class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3,8,11, padding=0) # 输入通道数, 输出通道数, 卷积核大小 self.pool = nn.MaxPool2d(2,2) # 池化核大小, 步长 self.conv2 = nn.Conv2d(8, 36, 5, padding=0) self.fc1 = nn.Linear(36*291*291, 30) # 输入特征数, 输出特征数 self.fc2 = nn.Linear(30, 20) self.fc3 = nn.Linear(20, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) # 展平除批次外的所有维度 x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x
我的代码是这样的,但我得到了"运行时错误:无法将矩阵相乘"
的错误信息。
输入的形状是:'torch.Size([3,600,600])'
,有3个通道。请帮帮我!
回答:
756900只需更改模型定义,您最后一个卷积层的输出形状并不是36x291x291
。只需将模型定义更改为:
class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3,8,11, padding=0) # 输入通道数, 输出通道数, 卷积核大小 self.pool = nn.MaxPool2d(2,2) # 池化核大小, 步长 self.conv2 = nn.Conv2d(8, 36, 5, padding=0) self.fc1 = nn.Linear(756900, 30) # 输入特征数, 输出特征数 self.fc2 = nn.Linear(30, 20) self.fc3 = nn.Linear(20, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) # 展平除批次外的所有维度 x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x
使用相同的输入大小尝试后,运行正常。