TL;DR
- 1つのプログラム内で複数のモデルをトレーニングする際、Optimizerのインスタンスはトレーニングごとに新しいインスタンスを作る必要がある
起こったこと
クロスバリデーションなどを使って、1つのプログラム内で複数のモデルをトレーニングする際、学習率やOptimizerなどのハイパーパラメーターを複数の学習で使い回すために変数に保存しておくことがありますが、その際にOptimizerのインスタンスを保存して使いまわそうとしたところ、以下のようなエラーが発生しました。
対応
複数のトレーニング間でOptimizerのインスタンスを使い回していることが問題のため、トレーニングごとにOptimizerのインスタンスを作り直すことで解決しました。
原因はおそらくAdamなどの適応的に学習率を変化させるOptimizerが、1次モーメントなどの状態を内部に持っているためだと考えられます。
ちなみに損失関数では発生しません。
状態を持っているはずがないのであたりまえといえばあたりまえですが紛らわしいですね。