You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch搭建神经网络矩阵乘法维度不匹配RuntimeError报错排查

PyTorch全连接网络矩阵维度不匹配报错修复

错误原因

报错核心是模型定义阶段的全连接层命名错误:

  • 在模型__init__构造方法中,从第2个全连接层开始,连续8层全部重复赋值给self.f_connected2属性,Python类属性会被最后一次赋值覆盖,最终self.f_connected2仅保留了最后定义的nn.Linear(300,300)层,原本计划定义的第2到第8个隐藏层全部被覆盖丢失。
  • forward前向传播方法中调用的self.f_connected3到self.f_connected9均为未定义的属性,实际运行时,输入经过第一层全连接后输出形状为(691,8)(691为批量样本数,8为第一层输出特征数),直接传入输入维度要求为300的f_connected2层,矩阵乘法要求前一个矩阵的列数与后一个矩阵的行数相等,8与300不匹配,直接触发运行时错误。

修复步骤

  1. 修正构造方法中的全连接层命名,保证每个层的属性名唯一,与forward方法中的调用一一对应,修正后的模型代码如下:
import torch.nn as nn
import torch.nn.functional as F

class ANN_Model(nn.Module):
    def __init__(self,input_features=8,hidden1=8,hidden2=200,hidden3=200,hidden4=300,hidden5=300,hidden6=400,hidden7=400,hidden8=300,hidden9=300,out_features=2):
        super().__init__()
        self.f_connected1 = nn.Linear(input_features, hidden1)
        self.f_connected2 = nn.Linear(hidden1, hidden2)
        self.f_connected3 = nn.Linear(hidden2, hidden3)
        self.f_connected4 = nn.Linear(hidden3, hidden4)
        self.f_connected5 = nn.Linear(hidden4, hidden5)
        self.f_connected6 = nn.Linear(hidden5, hidden6)
        self.f_connected7 = nn.Linear(hidden6, hidden7)
        self.f_connected8 = nn.Linear(hidden7, hidden8)
        self.f_connected9 = nn.Linear(hidden8, hidden9)
        self.out = nn.Linear(hidden9, out_features)
        
    def forward(self,x):
        x = F.relu(self.f_connected1(x))
        x = F.relu(self.f_connected2(x))
        x = F.relu(self.f_connected3(x))
        x = F.relu(self.f_connected4(x))
        x = F.relu(self.f_connected5(x))
        x = F.relu(self.f_connected6(x))
        x = F.relu(self.f_connected7(x))
        x = F.relu(self.f_connected8(x))
        x = F.relu(self.f_connected9(x))
        x = self.out(x)
        return x
  1. 调整训练循环中的前向传播调用逻辑,不要直接显式调用forward方法,PyTorch提供的__call__接口会自动处理内置钩子、设备移动等逻辑,修改前向传播代码为:
y_pred = model(X_train)

额外优化建议

  • 你当前设计的网络层数达9层、隐藏层维度最高到400,对于仅8个输入特征的二分类任务来说结构过于复杂,很容易出现过拟合、训练不稳定的问题,建议先从2-3层隐藏层的小模型开始测试,比如设置隐藏层维度为32、16,训练效果和效率都会更优。
  • 可以在训练前打印模型结构print(model),逐行核对每个全连接层的输入输出维度是否符合预期,能快速定位大部分维度匹配问题。

内容的提问来源于stack exchange,提问作者Saniaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:39:17