分层设置不同的学习率
对于自己定义的网络层(插入、加入…)等均可以设置不同的学习率,具体实现如下:
- 对于某个单层
net = net()
lr = 0.001
conv5_params = list(map(id, net.conv5.parameters()))
base_params = filter(lambda p: id(p) not in conv5_params,
net.parameters())
optimizer = torch.optim.SGD([
{'params': base_params},
{'params': net.conv5.parameters(), 'lr': lr * 100}], lr=lr, momentum=0.9)
- 对于多层
conv5_params = list(map(id, net.conv5.parameters()))
conv4_params = list(map(id, net.conv4.parameters()))
base_params = filter(lambda p: id(p) not in conv5_params + conv4_params,
net.parameters())
params = [{'params': base_params},
{'params': net.conv5.parameters(), 'lr': lr * 100},
{'params': net.conv4.parameters(), 'lr': lr * 100}]
optimizer = torch.optim.SGD(params, lr=lr, momentum=0.9)
注意:当net是model类型时才可以“点”,后面跟的是网络层名称,即model的属性;使用net = torch.nn.DataParallel(net)后,net变成了DataParallel类型,就没有属性了,即要在此语句之前调整学习率。
2524

被折叠的 条评论
为什么被折叠?



