【发布时间】:2022-01-28 18:38:27
【问题描述】:
我正在尝试制作一个图像检测神经网络。训练数据在 64 的批量大小内加载。运行此代码后,我得到 RuntimeError:mat1 和 mat2 形状不能相乘(64x3072 和 64x3072)。这很令人困惑,因为对我来说这两种形状/大小似乎是一样的。 谁能帮我找出那个错误?
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 6, kernel_size=2)
self.conv2 = nn.Conv2d(6, 12, kernel_size=2)
self.conv3 = nn.Conv2d(12, 18, kernel_size=2)
self.conv4 = nn.Conv2d(18, 768, kernel_size=2)
self.fc1 = nn.Linear(64, 3072)
self.fc2 = nn.Linear(3072, 7)
def forward(self, x):
print(x.size()) #1
x = self.conv1(x)
x = F.max_pool2d(x, 2)
x = F.relu(x)
print(x.size()) #2
x = self.conv2(x)
x = F.max_pool2d(x, 2)
x = F.relu(x)
print(x.size()) #3
x = self.conv3(x)
x = F.max_pool2d(x, 2)
x = F.relu(x)
print(x.size()) #4
x = self.conv4(x)
x = F.max_pool2d(x, 2)
x = F.relu(x)
print(x.size()) #5
x = x.view(x.size(0), -1)
x = F.relu(self.fc1(x))
print(x.size()) #6
x = self.fc2(x)
print(x.size()) #7
return torch.sigmoid(x)
forward 函数的打印输出为:
torch.Size([64, 1, 48, 48]) #1
torch.Size([64, 6, 23, 23]) #2
torch.Size([64, 12, 11, 11]) #3
torch.Size([64, 18, 5, 5]) #4
torch.Size([64, 768, 2, 2]) #5
所以,我很确定错误位于 x = x.view() 行和第一个全连接层中的某处。但我无法让它运行。
【问题讨论】:
-
请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。