tf.train.MonitoredTrainingSessionに変数の一部のみを復元し、残りの部分を初期化する方法を教えてください。 cifar10チュートリアルを皮切りtf.train.MonitoredTrainingSessionを使用して特定の変数のみを復元する方法
.. https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_train.py
..私は復元し、初期化する変数のリストを作成し、私はMonitoredTrainingSessionに渡す足場使用してそれらを指定:
restoration_saver = Saver(var_list=restore_vars)
restoration_scaffold = Scaffold(init_op=variables_initializer(init_vars),
ready_op=constant([]),
saver=restoration_saver)
を
が、これは次のエラーを与える:
RuntimeError: Init operations did not make model ready for local_init. Init op: group_deps, init fn: None, error: Variables not initialized: conv2a/T, conv2b/T, [...]
.. uninitiaエラーメッセージに列挙された変数は私の "init_vars"リストの変数です。
例外はSessionManager.prepare_session()によって発生します。そのメソッドのソースコードは、セッションがチェックポイントから復元された場合、init_opは実行されないことを示しているようです。つまり、変数のリストアや変数の初期化は可能ですが、両方を行うことはできません。
私はそれを取得しません。それらをlocal_init_opとして指定すると、モデル変数を2回初期化することができます。モデルに保存されていない他の変数であってはなりませんか? – Magnus
まず、変数を2回初期化するのは大きな問題ではないと思います。次に、あなたは 'var_list'にどの変数があるのかを選択します。この質問は、あなたの変数のいくつかを復元し、あなたのモデルに存在する可能性のあるものよりも初期化することについてです。あなたの質問は正しくないかもしれませんか? – Bastiaan
変数を復元して初期化するとどうなりますか?復元された状態は、その後上書きされませんか? 'var_list'には私が保存している変数だけが含まれているので?私が理解しているところは、 'model_ready_for_local_init_op'は' var_list'のすべての変数が初期化されたとき(モデルから復元されたとき)、つまり私に知らせることです。空のリストを返して、次に保存されていない他の変数(つまり 'model_init_tmp_vars')を初期化できますか? – Magnus