私は、一連の変数でモデル(モデルA)を作成しました。モデルAのレイヤーのいくつかを使って新しいモデル(モデルB)でモデルAを使った伝達学習をする予定です。しかし、モデルBはモデルAと同じアーキテクチャーなので、モデルAからすべての変数をロードすることはできませんモデルBを実行する必要があります。それ以外の場合は、命名などでエラーが発生します。モデルAから必要なウェイトだけを保存する新しいckptファイルを作成しようとしています。この新しいckptファイルを使用して、モデルB 。私はmodel_A_subset.ckptを復元するときTensorflow:以前に作成されたモデルから変数のサブセットを保存します。
sess = tf.Session()
saver = tf.train.import_meta_graph('ModelA.ckpt.meta')
saver.restore(sess, 'ModelA.ckpt')
# I did not explicity name my variables in model A so I am just placing them in the list and taking the ones I want
store_list = []
for v in tf.trainable_variables():
store_list.append(v)
var_list={"W_1": store_list[0], "b_1": store_list[1]}
v2_saver=tf.train.Saver(var_list)
sess.run(tf.global_variables_initializer())
v2_saver.save(sess, 'model_A_subset.ckpt')
は、しかし、私はまだModelA.ckptからすべての変数を持っている:私は、次があります。私は何か間違っているのですか? ModelA.ckptから不要な変数を簡単に削除して使用できる方法はありますか?
おそらく私はinspect_checkpointを誤解しているかもしれませんが、新しいスクリプトでサブセットモデルをリロードするときには、グラフを作成する必要がある 'saver = tf.train.import_meta_graph( 'Model_A_subset.ckpt.meta')'を実行してから、 'saver .restore(sess、 'Model_A_subset.ckpt') 'それで、グラフに書かれていないと、グラフは不要な変数を知っているでしょうか? – bnorm
ああ、メタデータをリロードすると、その変数だけでなく、他のモデルのグラフ全体が表示されます。 –