0
import tensorflow as tf
saver = tf.train.Saver()
saver.restore(...)
しかし、saver.restoreにはグラフ全体を復元するオプションしかありません。特定の範囲にある変数のみを復元したいと思います。テンソルフローで保存されたチェックポイントから特定のスコープの変数を復元する方法はありますか?
ありがとうございます!
import tensorflow as tf
saver = tf.train.Saver()
saver.restore(...)
しかし、saver.restoreにはグラフ全体を復元するオプションしかありません。特定の範囲にある変数のみを復元したいと思います。テンソルフローで保存されたチェックポイントから特定のスコープの変数を復元する方法はありますか?
ありがとうございます!
GoogleのInceptionNetモデルがInceptionV1
であり、再試行する範囲InceptionRetrained
の最後のレイヤーを除いてロードしたいとします。
最後のレイヤーの再トレーニングを開始し、last_layer.ckptファイルを作成したと仮定すると、両方のチェックポイントからネットを復元する方法がここにあります。
saver1 = tf.train.Saver(var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='InceptionV1'))
saver1.restore(session, 'inception_model_from_google.ckpt')
saver2 = tf.train.Saver(var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='InceptionRetrained'))
saver2.restore(session, 'last_layer.ckpt')
あなただけの最後の層を再訓練している場合は、var_list
引数を指定してオプティマイザを呼び出すことにより、(時間を節約できます)勾配アップネットワークの伝播を無効にすることを忘れないでください。
tf.train.Optimizer(0.0001).minimize(
loss, var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='Inceptionretrained'))