Python 我可以在PyTorch中指定特定于内核重量的学习速率吗?

Python 我可以在PyTorch中指定特定于内核重量的学习速率吗?,python,deep-learning,pytorch,learning-rate,Python,Deep Learning,Pytorch,Learning Rate,我想为每个参数设定最低水平的具体学习率。即,内核权重和偏差中的每个值都应有自己的学习率 我可以这样指定过滤式学习率: 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

我想为每个参数设定最低水平的具体学习率。即,内核权重和偏差中的每个值都应有自己的学习率

我可以这样指定过滤式学习率:

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:无法优化非叶张量
我还尝试指定一个与过滤器形状相同的学习速率,例如
“lr”:torch.ones_like(model.conv1.weight)
,但也没有成功


有没有一种方法可以使用torch.optim实现这一点?

一个简单的技巧是创建一个新的张量,称为
learning\u rate
,其大小与模型相同。然后在应用梯度时,将
梯度
张量与
学习率
张量相乘。请让我知道这是否适合你

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

下面是一个使用
torch.optim.Adam
的示例:

torch.optim.CustomAdam([{'params':param,'lr':torch.one_like(param,requires_grad=False)*lr}
对于名称,请使用model.named_parameters()]中的参数
然后我们必须更改优化器本身中的一行。为此,我创建了一个自定义优化器:

class CustomAdam(torch.optim.Adam):
def步骤(自关闭=无):
...
#将最后一行更改为:p.data.addcdiv(步长大小,exp\u avg,denom)
p、 数据添加((-step_size*(exp_avg/denom)))

这是一个非常有限的问题,例如,您无法指定一个可行的调度程序,但我认为我找到了一个更简单的解决方案