洛白邪 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 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答