neural-network - 初学者 PyTorch - 运行时错误 : shape '[16, 400]' is invalid for input of size 9600

标签 neural-network artificial-intelligence pytorch conv-neural-network

我正在尝试构建 CNN,但出现此错误:

---> 52         x = x.view(x.size(0), 5 * 5 * 16)
RuntimeError: shape '[16, 400]' is invalid for input of size 9600

我不清楚“x.view”行的输入应该是什么。另外,我真的不明白我应该在我的代码中使用这个“x.view”函数多少次。是不是只有一次,在 3 个卷积层和 2 个线性层之后?还是5次,每层一次?

这是我的代码:

美国有线电视新闻网
import torch.nn.functional as F

# Convolutional neural network
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(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(512, 10)

        self.final = nn.Softmax(dim=1)

    def forward(self, x):

        print('shape 0 ' + str(x.shape))

        x = F.max_pool2d(F.relu(self.conv1(x)), 2)  
        x = self.dropout(x)

        print('shape 1 ' + str(x.shape))

        x = F.max_pool2d(F.relu(self.conv2(x)), 2)  
        x = self.dropout(x)

        print('shape 2 ' + str(x.shape))

        # x = F.max_pool2d(F.relu(self.conv3(x)), 2)  
        # x = self.dropout(x)

        x = F.interpolate(x, size=(5, 5))  
        x = x.view(x.size(0), 5 * 5 * 16)

        x = self.fc1(x) 

        return x

net = ConvNet()

有人可以帮助我理解问题吗?

'x.shape' 的输出是:

形状 0 torch.Size([16, 3, 256, 256])

形状 1 torch.Size([16, 16, 127, 127])

形状 2 torch.Size([16, 24, 62, 62])

谢谢

最佳答案

这意味着 channel 和空间维度的乘积不是 5*5*16 .要展平张量,请替换 x = x.view(x.size(0), 5 * 5 * 16)和:

x = x.view(x.size(0), -1)

self.fc1 = nn.Linear(600, 120)和:
self.fc1 = nn.Linear(600, 120)

关于neural-network - 初学者 PyTorch - 运行时错误 : shape '[16, 400]' is invalid for input of size 9600,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60439570/

相关文章:

artificial-intelligence - 智能代理 "tutorial"

artificial-intelligence - Tron 的良好启发式

machine-learning - 概率 kNN 和朴素贝叶斯之间的区别

python - padding_idx 在 nn.embeddings() 中做什么

python - 如何表示 PyTorch LSTM 3D 张量?

python-2.7 - Theano 在计算梯度方面的效率/智能如何?

python - 用 Python 开发神经网络来预测出勤率

pytorch - 如何告诉 PyTorch 不使用 GPU?

c# - 我的单层感知器不工作

machine-learning - 深度置信网络与卷积神经网络