在pytorch中,如何与优化器一起使用add_param_group()?

Ink*_*ay_ 5 parameters backpropagation python-3.x pytorch

该文档含糊不清,没有示例代码向您展示如何使用它。它的文档是

将参数组添加到Optimizer的param_groups中。

当对预训练的网络进行微调时,这很有用,因为可以使冻结的层成为可训练的,并随着训练的进行而添加到优化器中。

参数:param_group(dict)–指定应优化哪些张量以及组优化选项。(具体)–

我假设我可以param_group通过输入从模型的state_dict()?获得的值来获取参数。例如所有实际重量值?我之所以这样问是因为我想建立一个渐进网络,这意味着我需要不断地从新创建的卷积和激活模块中输入Adam参数。

iac*_*ppo 8

根据文档,该add_param_group方法接受param_group参数dict。使用示例:

import torch
import torch.optim as optim


w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)
Run Code Online (Sandbox Code Playgroud)

[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0}]
Run Code Online (Sandbox Code Playgroud)

现在

o.add_param_group({'params': w2})
print(o.param_groups)
Run Code Online (Sandbox Code Playgroud)

给出:

[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0},
 {'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[-0.0560,  0.4585, -0.7589],
           [-0.1994,  0.4557,  0.5648],
           [-0.1280, -0.0333, -1.1886]])],
  'weight_decay': 0}]
Run Code Online (Sandbox Code Playgroud)

  • @donto你可以在字典中传递优化器选项:`o.add_param_group({'params': w2, "lr": 1e-1})` (2认同)