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

PyTorch中optimizer.step()无法更新模型权重问题求助

参数不更新的原因分析

核心问题:模型前向传播方法名拼写错误

你的Net类里定义的方法是foward(少了一个字母r),但PyTorch模型执行前向传播时会调用标准的forward方法。当你调用my_model(inputs)时,实际执行的是nn.Module基类默认的forward方法——这个方法仅返回输入本身,并没有经过你定义的fc1全连接层,因此模型参数压根没产生梯度,optim.step()自然不会对参数做任何更新。

修复方案

把方法名修正为正确的forward:

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.fc1 = nn.Linear(10,4)

    def forward(self,x):  # 此处修正拼写错误
        return nn.functional.relu(self.fc1(x))

验证梯度是否正常

修复后,你可以在outputs.backward()之后检查参数的梯度状态,确认梯度已生成:

print(list(my_model.parameters())[0].grad)

如果输出非None的数组,说明梯度计算正常,此时调用optim.step()就能正确更新参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:50:29