我遇到一个错误:
形状'[-1,270000]'对于大小为1440000的输入无效
运行我的CNN结构代码时,输入张量大小为64。
Class MyNet(nn.Module):
def __init__(self):
super(MyNet, self).__init__()
self.conv1 = nn.Conv2d(3, 48, 2)
self.conv2 = nn.Conv2d(48, 108, 2)
self.conv3 = nn.Conv2d(108, 192, 2)
self.conv4 = nn.Conv2d(192, 300, 2)
self.pool = nn.MaxPool2d(2, 2)
self.fc1 = nn.Linear(300* 30* 30, 864)
self.fc2 = nn.Linear(864, 288)
self.fc3 = nn.Linear(288, 2)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = F.relu(self.conv3(x))
x = F.relu(self.conv4(x))
#x = self.pool(F.relu(self.conv4(x)))
x = self.pool(x)
x = x.view(-1, 300 * 30* 30)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return F.log_softmax(x)
知道我为什么会出错吗?
答案 0 :(得分:0)
由于在最大池化层之后,要素图的形状为(300, width, height)
和300*width*height != 300*30*30
。如果要重塑张量,则必须保留相同数量的元素。
答案 1 :(得分:0)
由于300*30*30
的大小与您的激活大小不匹配,应将x展平的视图操作将引发此错误。您的自定义数据集很可能具有不同的空间大小,从而导致视图失败。
基于错误消息中给出的形状,看来您的激活应具有[batch_size=3, channels=300, height=40, width=40]
的形状,这将产生1440000
值。尝试将线性图层中的输入大小更改为300*40*40
,如下所示:
self.fc1 = nn.Linear(300*40*40, 864)
展平至:
x = x.view(x.size(0), 300*40*40)
如果这不起作用,请通知我。