PyTorch如何将单个nn.Parameter张量添加到优化器中训练
错误原因
parameters()是nn.Module子类才具备的方法,用于返回模块内部包含的所有可训练参数迭代器:
- 你之前调用的
model.rgb_layers[0]是nn.Conv2d实例,属于nn.Module子类,因此可以正常调用parameters()方法 self.inital_value本身就是单个nn.Parameter实例,不属于nn.Module子类,因此不存在parameters()方法,直接调用会触发报错
解决方案
直接将该参数放入列表这类可迭代对象中,传给优化器即可:
opt = optim.RMSprop([model.inital_value], lr = lr)
如果需要同时训练多个独立参数/不同模块的参数,直接在列表中拼接对应参数即可,示例如下:
# 同时训练initial_value和rgb_layers第一层的参数 opt = optim.RMSprop([model.inital_value] + list(model.rgb_layers[0].parameters()), lr = lr)
内容的提问来源于stack exchange,提问作者Moran Reznik
相关产品推荐
相关产品推荐

