RuntimeError:AddmmBackward返回无效梯度 张量形状不匹配问题求助
AddmmBackward梯度形状不匹配问题排查与解决
RuntimeError: Function AddmmBackward returned an invalid gradient at index 2 - got [100, 80] but expected shape compatible with [80, 80]
该报错对应线性层核心运算torch.addmm的梯度计算异常,索引2指向线性层的权重参数,本质是权重的实际梯度形状和权重本身的预设形状不匹配,可按以下步骤排查解决:
- 核对全连接层的输入输出维度配置
大概率是全连接层的in_features和out_features配置写反。如果当前层输入特征维度为100、输出维度为80,全连接层应配置为nn.Linear(100, 80),若错误配置为nn.Linear(80, 80)就会触发该维度冲突。 - 检查前一层的输出形状
在前向传播流程中打印每一层输出的shape属性,确认进入报错线性层的输入最后一维,和该层设置的in_features完全一致。 - 核对自定义权重操作的参数形状
如果有手动修改线性层权重、自定义权重初始化的操作,检查是否写错了权重形状,比如原本应为(80, 100)的权重被错误初始化为(80,80),也会导致梯度不匹配。 - 检查batch维度的异常操作
排查代码中是否对batch维度做了错误的拼接、切片或转置,比如把(batch_size, 100)的输入错误转置为(100, batch_size)后喂入线性层,也会导致梯度形状错位。
常见错误修正示例
错误写法:
# 输入特征维度实际为100,错误将in_features设为80 fc_layer = nn.Linear(80, 80)
修正写法:
# 匹配输入维度100,输出维度80 fc_layer = nn.Linear(100, 80)
内容的提问来源于stack exchange,提问作者Thanh Nguyen
相关产品推荐
相关产品推荐

