如何仅更新PyTorch网络中的特定张量?

例如,我想在前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并修改学习率。

有关更多信息,请参见按参数选项

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注