web-dev-qa-db-ja.com

pytorchでは、オプティマイザーでadd_param_group()をどのように使用しますか?

ドキュメントはかなりあいまいで、使用方法を示すサンプルコードはありません。そのためのドキュメントは

オプティマイザーのparam_groupsにパラメーターグループを追加します。

これは、事前にトレーニングされたネットワークを微調整するときに役立ちます。フリーズされたレイヤーをトレーニング可能にして、トレーニングの進行に合わせてオプティマイザーに追加できるからです。

パラメーター:param_group(dict)–グループ最適化オプションとともに最適化するテンソルを指定します。 (明確な) -

モデルのstate_dict()から取得した値をフィードすることで、param_groupパラメーターを取得できると想定していますか?例えば。すべての実際の重量値?プログレッシブネットワークを作成したいので、これを求めています。つまり、新しく作成された畳み込みおよびアクティベーションモジュールからAdamパラメーターを常にフィードする必要があります。

6
Inkplay_

ドキュメントによると、add_param_groupメソッドはdictであるparam_groupパラメーターを受け入れます。使用例:

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)

与える

[{'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}]

o.add_param_group({'params': w2})
print(o.param_groups)

与える:

[{'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}]
9
iacolippo