错误:形状'[-1,270000]'对于大小为1440000的输入无效

时间:2019-06-20 10:19:47

标签: pytorch

我遇到一个错误:

  

形状'[-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)

知道我为什么会出错吗?

2 个答案:

答案 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)

如果这不起作用,请通知我。