修改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
相关产品推荐
相关产品推荐

