微调属于迁移学习中的一种,今天在学习“微调”时,发现有这么一段代码:
params_1x = [param for name, param in net.named_parameters()
if name not in ["fc.weight", "fc.bias"]]
trainer = torch.optim.SGD([{'params': params_1x},
{'params': net.fc.parameters(),
'lr': learning_rate * 10}],
lr=learning_rate, weight_decay=0.001)
param_1x这行代码选出不是fc层的weight和bias的其他参数。
而trainer代码实现对fc层的优化器设置10倍的学习率,param_1x里的参数则是默认。
刚开始看的时候不是很明白,于是去pytorch文档看了下:
总之是学习到了,用字典的方式来指定特殊层的参数的学习率。
事实上在迁移学习中,我们还可以设定网络中某些层的参数不随训练而更新:
for param in finetune_net.parameters():
param.requires_grad = False
参考资料: