1. ホーム
  2. python

[解決済み] Kerasレイヤーの重みをリセットする

2022-02-18 09:03:12

質問

Keras(深層学習)モデルの全レイヤーの重みをリセット(ランダム化)したいのですが、どうすればいいですか?理由は、毎回(遅い)モデルの再コンパイルをすることなく、異なるデータ分割で何度もモデルを訓練できるようにしたいからです。

インスピレーション 本論 , 私は次のコードを試しています。

# Reset weights
for layer in KModel.layers:
    if hasattr(layer,'init'):
        input_dim = layer.input_shape[1]
        new_weights = layer.init((input_dim, layer.output_dim),name='{}_W'.format(layer.name))
        layer.trainable_weights[0].set_value(new_weights.get_value())

しかし、一部しか機能しない。

一部、layer.get_weights()の値を検査したところ、変化しているように見えましたので。しかし、トレーニングを再開すると、コスト値が最初の実行時のコスト値よりずっと低くなっています。重みのリセットは成功したようですが、全部は成功していないようです。

どのように解決するのですか?

モデルをコンパイルした直後で、学習する前に初期重みを保存してください。

model.save_weights('model.h5')

そして、学習後、初期重みを再ロードすることでモデルをリセットします。

model.load_weights('model.h5')

これにより、異なるデータセットを比較するためのApple to Applesモデルができ、モデル全体を再コンパイルするよりも速くなるはずです。