繁体   English   中英

初学者 PyTorch:运行时错误:大小不匹配,m1:[16 x 2304000],m2:[600 x 120]

[英]Beginner PyTorch : RuntimeError: size mismatch, m1: [16 x 2304000], m2: [600 x 120]

我是 PyTorch 的初学者,一般都在构建神经网络,但我有点卡住了。

我有这个 CNN 架构:

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(600, 120)
        self.fc2 = nn.Linear(512, 10)

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

    def forward(self, x):

        # conv 3 layers

        x = F.max_pool2d(F.relu(self.conv1(x)), 2)  # output of conv layers
        x = self.dropout(x)

        x = F.max_pool2d(F.relu(self.conv2(x)), 2)  # output of conv layers
        x = self.dropout(x)

        x = F.max_pool2d(F.relu(self.conv3(x)), 2)  # output of conv layers
        x = self.dropout(x)

        # linear layer

        x = F.interpolate(x, size=(600, 120))
        x = x.view(x.size(0), -1)

        x = self.fc1(x) 

        return x

但是当我尝试使用我的图像进行训练时,它不起作用并且出现以下错误:

RuntimeError: size mismatch, m1: [16 x 2304000], m2: [600 x 120]

我想添加第二个线性层( self.fc2 )以及最终的 SoftMax 层( self.final ),但由于我被困在第一个线性层,我无法取得任何进展。

self.fc1的输入维度需要与展平张量的特征(第二)维度相匹配。 因此,您可以将其替换为self.fc1 = nn.Linear(2304000, 120)而不是执行self.fc1 = nn.Linear(600, 120) self.fc1 = nn.Linear(2304000, 120)

请记住,因为您使用的是全连接层,所以模型不能是输入大小不变的(与全卷积网络不同)。 如果您在x = x.view(x.size(0), -1)之前更改通道的大小或空间维度(就像您从上一个问题移动到这个问题一样),则self.fc1的输入维度将必须相应地改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM