洛白邪 2023-02-08 20:16 采纳率: 100%
浏览 558
已结题

关于#神经网络#的问题:RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x64 and 128x64)

RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x64 and 128x64)
近期在调试一个四层的BP神经网络,报出了这样的错误:

img

大概知道问题出在这里:

    def forward(self, x):
        x = F.relu(self.hidden_1(x))
        x = self.dropout(self.bn1(x))
        x = F.relu(self.hidden_2(x))
        x = self.dropout(self.bn2(x))
        x = F.relu(self.hidden_3(x))
        x = self.dropout(self.bn3(x))
        x = F.relu(self.hidden_4(x))%问题所在
        x = self.dropout(self.bn4(x))
        x = self.out(x)
        return x

目前已经尝试过添加

x = torch.flatten(x,1)

不能解决/(ㄒoㄒ)/~~,感觉也不是池化层输出形状的问题叭,因为打印在def forward(self, x)中print(x.shape)输出是([64,64]),唉,神经网络小菜请教如何解决🙇‍
下面贴出相关代码:

class Classifier(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output, dropout=0.5):
        super(Classifier, self).__init__()
        self.dropout = torch.nn.Dropout(dropout)

        self.hidden_1 = torch.nn.Linear(n_feature, n_hidden)
        self.bn1 = torch.nn.BatchNorm1d(n_hidden)

        self.hidden_2 = torch.nn.Linear(n_hidden, n_hidden//4)
        self.bn2 = torch.nn.BatchNorm1d(n_hidden//4)

        self.hidden_3 = torch.nn.Linear(n_hidden//4, n_hidden//8)
        self.bn3 = torch.nn.BatchNorm1d(n_hidden//8)
        #三层卷积与四层卷积
        self.hidden_4 = torch.nn.Linear(n_hidden // 4, n_hidden // 8)
        self.bn4 = torch.nn.BatchNorm1d(n_hidden // 8)

        self.out = torch.nn.Linear(n_hidden//8, n_output)

    def forward(self, x):
        x = F.relu(self.hidden_1(x))
        x = self.dropout(self.bn1(x))
        x = F.relu(self.hidden_2(x))
        x = self.dropout(self.bn2(x))
        x = F.relu(self.hidden_3(x))
        x = self.dropout(self.bn3(x))
        x = F.relu(self.hidden_4(x))
        x = self.dropout(self.bn4(x))
        x = self.out(x)
        return x
 for i, data in enumerate(train_loader):
            optimizer.zero_grad() 
            train_pred = model(data[0])
            batch_loss = loss(train_pred, data[1]) 

            batch_loss.backward()  
            optimizer.step()  

            train_acc += np.sum(np.argmax(train_pred.cpu().data.numpy(), axis=1) == data[1].numpy())
            train_loss += batch_loss.item()
  • 写回答

3条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2023-02-10 08:35
    关注

    问题在后面的 model(data[0]),data 和 x 不匹配,设置错误.

    可以打印和追踪矩阵的形状,是开始设置时就不匹配,还是中间被修改了,在哪里发生修改的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗