からの復元変数:Aは、変数a1
、a2
、およびa3
で構成されていTensorFlow:私は次のような状況持つ複数のチェックポイント
モデル:
は、私は2つの別々のスクリプトで記述された2つのモデルを持っています、で書かれています
A.py
モデルBは変数から成ります
b1
,b2
、およびb3
、およびA.py
とB.py
のそれぞれにおいて
B.pyで書かれて、私はすべてのローカル変数のチェックポイントを保存しtf.train.Saver
を持っている、とのそれぞれのチェックポイントファイルckptA
とckptB
を呼びましょう。
ここで、a1
とb1
を使用するモデルCを作成します。私はそれを作ることができますように正確な同じ変数名a1
は、AとCの両方でvar_scopeを使用して(と同じのb1
)を使用します。
a1
とb1
をckptA
とckptB
からモデルCにロードするにはどうすればよいですか?たとえば、次のように動作しますか?
saver.restore(session, ckptA_location)
saver.restore(session, ckptB_location)
同じセッションを2回復元するとエラーが発生しますか?余分な変数(b2
、b3
、a2
、a3
)に割り当てられた "スロット"がない、または単純に変数を復元するだけで、Cで初期化されていない他の変数がある場合にのみ不平を言いますか?
私は今これをテストするためのコードを書こうとしていますが、事前に訓練されたウェイトを再利用しようとするとこの問題に頻繁に遭遇するため、この問題に対する正式なアプローチが大好きです。
ありがとうございます!
最初のコードフラグメントは、正確にC.pyで書かれるべきものを指しますか? a1 a2 a3とb1 b2 b3がCpyで定義されているグラフ定義の最後に書き込まれます。 私の元来の質問は、a1とb1だけがC言語で定義されていて、他に何も定義されていないのですか? –
申し訳ありません - このケースをカバーする回答が更新されました。 C.pyで変数を再定義すると、作業がはるかに簡単になります! – mrry
もう1つのフォローアップ:「saver_a.restore(session、ckptA_location)」というステートメントを実行すると、saver_aは単一変数[a1]でインスタンス化されますが、それ以外はckptAにすべてのa1、a2、a3の値が含まれます。 a2とa3を無視して、ckptでa1のみを検索し、a1をモデルCに復元するので、これは問題ではないと言っていますか?そして、最後の1つの質問:両方のa1が(CとAで)同じ名前でインスタンス化されている限り、Cのa1はckptAのa1として識別されますか? –