写了一下午的代码,总结一下,方便后人必坑
网络上有部分代码未正确地使用了filter,请出现错误的同学仿照我的代码实现该功能。
pytorch optimizer支持传入params参数,以完成不同的网络层可以选取不同的学习率。
用到的两个函数分别为map(获取parameter_id)、filter (筛选)
直接上代码:
# 想要特殊lr的网络层, **改为网络层名称
zsj_lr_param = list(map(id, net.**.parameters()))
# 其他网络层统一参数
other_lr_param = list(filter(lambda x: id(x) not in zsj_lr_param, net.parameters())
# 传入参数, 请注意第一行写法
params = [{'params':net.**.parameters(), 'lr':1e-1},
{'params':other_lr_param , 'lr':1e-2}]
optimizer = torch.optim.Adam()