gpt4 book ai didi

python - 我可以在 PyTorch 中指定内核权重特定的学习率吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:21 25 4
gpt4 key购买 nike

我想为每个参数的最低级别设置特定的学习率。 IE。内核权重和偏差中的每个值都应该有自己的学习率。

我可以像这样指定过滤器方面的学习率:

optim = torch.optim.SGD([{'params': model.conv1.weight, 'lr': 0.1},], lr=0.01)

但是当我想降低一个级别时,就像这样:

optim = torch.optim.SGD([{'params': model.conv1.weight[0, 0, 0, 0], 'lr': 0.1},], lr=0.01)

我收到一个错误:ValueError: can't optimize a non-leaf Tensor我还尝试指定一个与过滤器具有相同形状的学习率,例如 'lr': torch.ones_like(model.conv1.weight) ,但这也没有成功。

有没有办法使用 torch.optim 来做到这一点? ?

最佳答案

我可能已经找到了解决方案。由于只能输入 Conv Layer 的全部权重和偏差,因此我们需要插入一个与权重/偏差张量形状相同的学习率。

这是一个使用 torch.optim.Adam 的例子:

torch.optim.CustomAdam([{'params': param, 'lr': torch.ones_like(param, requires_grad=False) * lr} 
for name, param in model.named_parameters()])

然后我们必须在优化器本身中更改一行。为此,我创建了一个自定义优化器:

class CustomAdam(torch.optim.Adam):
def step(self, closure=None):
...
# change the last line: p.data.addcdiv_(-step_size, exp_avg, denom) to
p.data.add_((-step_size * (exp_avg / denom)))

关于python - 我可以在 PyTorch 中指定内核权重特定的学习率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59018085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com