1. ホーム
  2. tensorflow

[解決済み] Keras (tensorflowバックエンド)のmodel.compile()は重みとバイアスを全て初期化するのか?

2023-01-16 07:29:53

質問

モデルの学習を開始するとき、以前に保存したモデルがありません。そこで model.compile() を安全に実行できます。私は今、モデルを h5 ファイルに保存し、さらに checkpoint .

このモデルをさらに学習させたいとします。このとき、私は混乱しています。 model.compile() を使ってもいいのでしょうか?の前に置くべきか、後に置くべきか? model = load_model() 文の前後どちらに置くべきでしょうか?もし model.compile() がすべての重みとバイアスを再初期化するならば、私はそれを model = load_model() 文の前に置くべきです。

いくつかの議論を発見した後、どうやら model.compile() が必要なのは、以前に保存したモデルがないときだけです。一度モデルを保存してしまえば model.compile() . これは真なのでしょうか、それとも偽なのでしょうか?また、学習させたモデルを用いて予測を行う場合は model.compile() を使うべきでしょうか?

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

いつ使用するのですか?

もし を使っている場合は compile の後でなければなりません。 load_model() . 結局のところ、コンパイルするためにはモデルが必要なのです。(追記 load_model はモデルとともに保存されたオプティマイザで自動的にモデルをコンパイルします)

は何をするのですか? compile は何をするのでしょうか?

コンパイルでは 損失関数 を定義します。 オプティマイザ メトリックス . 以上です。

重みとは関係なく、何度でもモデルをコンパイルすることができ、プリトレーニングされた重みに問題を生じさせることはありません。

コンパイルされたモデルが必要なのは 学習 (学習は損失関数とオプティマイザを使うから)。しかし、予測のためのモデルをコンパイルする必要はありません。

compileは複数回使う必要があるのでしょうか?

場合のみです。

  • これらのいずれかを変更したい場合。
    • 損失関数
    • オプティマイザ/学習率
    • メトリクス
    • trainable プロパティは、あるレイヤーの
  • まだコンパイルされていないモデルをロード(または作成)しました。または、load/save メソッドが以前のコンパイルを考慮しなかった。

再度コンパイルした場合の結果。

モデルを再コンパイルすると オプティマイザーの状態 .

これは、学習率やモーメンタムなどを調整するまでの間、最初のうちはトレーニングが少し苦しくなることを意味します。しかし、重みへのダメージはまったくありません(もちろん、最初の学習率が大きすぎて、最初の学習ステップで微調整された重みが乱暴に変更されてしまう場合は別ですが)。