PyTorch简易线性回归模型Bias参数不更新问题排查
线性回归模型中bias参数不更新问题排查
我正在跟随PyTorch教程搭建一个简易线性回归模型,相关代码如下:
class LinearRegression(nn.Module): def __init__(self): super().__init__() self.bias = nn.Parameter(torch.randn(1, requires_grad = True, dtype = torch.float)) self.weights = nn.Parameter(torch.randn(1, requires_grad = True, dtype = torch.float)) def forward(self, x: torch.Tensor) -> torch.Tensor: return self.weights * x + bias
我使用SGD作为优化器(学习率0.01),MAE作为损失函数。无论调整何种参数,bias参数始终不更新,但weight参数更新正常。我已尝试参数克隆,但并未解决问题。模型初始化代码如下:
torch.manual_seed(42) model = LinearRegression() list(model.parameters())
打印参数显示正常,请问我哪里出错了?
问题原因与解决方案
问题出在forward方法的变量引用错误:你调用了未定义的全局变量bias,而非模型实例的self.bias。
由于forward中未引用self.bias,PyTorch自动求导机制不会为该参数计算梯度,优化器自然无法更新它。
修改后的forward方法代码如下:
def forward(self, x: torch.Tensor) -> torch.Tensor: return self.weights * x + self.bias
修改后模型计算输出时会正确关联实例的bias参数,自动求导会生成对应梯度,SGD优化器即可正常更新bias参数。
内容的提问来源于stack exchange,提问作者user10418143
相关产品推荐
相关产品推荐

