Tensorflowで訓練されたモデルを復元する方法についてスタックやgithubなどに無数の質問があることは知っています。私はそれらの大部分を読んでいます(1、2、3)。保存する変数がないためテンソルフローのグラフを復元できない
私は3とほぼ同じ問題を抱えていますが、できる限り私のトレーニングとテストがシェルから呼び出された別々のスクリプトになる必要があり、テストスクリプトでグラフを定義するために使用したのと全く同じ行です。テンソルフローと他の答えは手動でグラフを再実行することに基づいて使用できません。
また、変数をすべてsess.runしたくないので、グラフがかなり大きいので説明したように手動で手動でマップします(引数input_mapでimport_graph_defを使用)。
私はグラフを実行し、特定のスクリプトでそれを訓練します。例えば
#Script 1
import tensorflow as tf
import cPickle as pickle
x=tf.Variable(42)
saver=tf.train.Saver()
sess=tf.Session()
#Saving the graph
graph_def=sess.graph_def
with open('graph.pkl','wb') as output:
pickle.dump(graph_def,output,HIGHEST_PROTOCOL)
#Training the model
sess.run(tf.initialize_all_variables())
#Saving the variables
saver.save(sess,"pretrained_model.ckpt")
(ただし、訓練部分なし)私は今、グラフと変数の両方が保存されているようなので、私は私のグラフに余分なトレーニング・ノードを持っている場合でも、別のスクリプトからの私のテストモデルを実行することができるはずです。
#Script 2
import tensorflow as tf
import cPickle as pickle
sess=tf.Session()
with open("graph.pkl','rb') as input:
graph_def=pickle.load(input)
tf.import_graph_def(graph_def,name='persisted')
はその後、明らかに私は、セーバーを使用して変数を復元したいが、でもセーバーを作成するために保存することが分かっ変数がないように私は3と同じ問題が発生しました。 だから私は書くことができません。
saver=tf.train.Saver()
saver.restore(sess,"pretrained_model.ckpt")
は、私はそれがすべてのノードで初期化されていない変数を回復するグラフをインポートすることで考えこれらの制限を回避するためにそこの方法ですが、私が本当に好きそれをもう一度再実行する必要はないようです答えのほとんどは与えられた?
おかげで「保存する変数は、変数ではありません」 !!!残念ながら、モデルの復元に関するもう1つの質問があります。しかし、私はそれが他人にも役立つと思います! – jean
@ Yaroslav、私は 'MetaGraphDef'を使っていますが、私は同じ問題を抱えています。私の質問をここで見てください:https://stackoverflow.com/questions/47762114/converting-a-pb-file-to-meta-in-tf-1-3 – Amir