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

