2017-03-29 6 views
3

私は、一連の変数でモデル(モデル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から不要な変数を簡単に削除して使用できる方法はありますか?

答えて

0

不要な変数がチェックポイントに含まれていますか?チェックポイントを復元する前にグラフを作成する必要があり、Aのすべての変数を含むグラフを作成している場合は、この問題が発生するため、私は尋ねます。

チェックポイントを調べ、実際に何があるかを確認するには、inspect checkpoint toolを試してみてください。

+0

おそらく私はinspect_checkpointを誤解しているかもしれませんが、新しいスクリプトでサブセットモデルをリロードするときには、グラフを作成する必要がある 'saver = tf.train.import_meta_graph( 'Model_A_subset.ckpt.meta')'を実行してから、 'saver .restore(sess、 'Model_A_subset.ckpt') 'それで、グラフに書かれていないと、グラフは不要な変数を知っているでしょうか? – bnorm

+0

ああ、メタデータをリロードすると、その変数だけでなく、他のモデルのグラフ全体が表示されます。 –

関連する問題