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

修改PyTorch神经网络隐藏层数量引发RuntimeError问题求助

PyTorch全连接网络维度不匹配问题修复

你的报错RuntimeError: mat1 and mat2 shapes cannot be multiplied (380x10 and 2x10),核心原因是网络层的维度设置错误,导致张量在传递时维度不兼容:

  • 经过输入层self.fcs后,张量形状变为(批量大小, N_HIDDEN)(示例中是380x10)
  • 但隐藏层self.fch的每个线性层都错误使用nn.Linear(N_INPUT, N_HIDDEN),要求输入维度为N_INPUT(示例中是2),和当前张量的10维不匹配
  • 最后的输出层self.fce同样错误地以N_INPUT作为输入维度,而非隐藏层的N_HIDDEN维度

修正后的代码

import torch
import torch.nn as nn

class FCN(nn.Module):
    def __init__(self, N_INPUT, N_OUTPUT, N_HIDDEN, N_LAYERS):
        super().__init__()
        activation = nn.Tanh
        # 输入层:将输入维度映射到隐藏层维度
        self.fcs = nn.Sequential(
            nn.Linear(N_INPUT, N_HIDDEN),
            activation()
        )
        # 隐藏层:保持隐藏层维度一致,实现特征变换
        self.fch = nn.Sequential(*[
            nn.Sequential(
                nn.Linear(N_HIDDEN, N_HIDDEN),
                activation()
            ) for _ in range(N_LAYERS-1)
        ])
        # 输出层:将隐藏层维度映射到最终输出维度
        self.fce = nn.Linear(N_HIDDEN, N_OUTPUT)

    def forward(self, x):
        x = self.fcs(x)
        x = self.fch(x)
        x = self.fce(x)
        return x


torch.manual_seed(123)
# 示例初始化:输入2维,输出2维,隐藏层10节点,共8层(1输入+6隐藏+1输出)
pinn = FCN(2, 2, 10, 8)

关键修正点

  • 隐藏层的线性层改为nn.Linear(N_HIDDEN, N_HIDDEN),确保前一层的输出维度和当前层的输入维度匹配
  • 输出层改为nn.Linear(N_HIDDEN, N_OUTPUT),完成从隐藏层特征到最终输出的映射
  • 修正后无论N_HIDDEN设置为多少(与N_INPUT不同也可),张量都能在层间正常传递,不会触发维度错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:03:29