例如,我想在前10个epoch中仅更新Resnet中的所有卷积层权重,并冻结其他部分。
从第11个epoch开始,我想改为更新整个模型。
我该如何实现这个目标?
回答:
您可以为不同参数组设置学习率(以及其他一些元参数)。您只需根据需要对参数进行分组。
例如,为卷积层设置不同的学习率:
import torchimport itertoolsfrom torch import nnconv_params = itertools.chain.from_iterable([m.parameters() for m in model.children() if isinstance(m, nn.Conv2d)])other_params = itertools.chain.from_iterable([m.parameters() for m in model.children() if not isinstance(m, nn.Conv2d)]) optimizer = torch.optim.SGD([{'params': other_params}, {'params': conv_params, 'lr': 0}], # 设置初始学习率为0 lr=lr_for_model)
您之后可以访问优化器的param_groups
并修改学习率。
有关更多信息,请参见按参数选项。