2016-03-25 11 views
0

テンソルフローのPythonで大きなモデルを実行しました。しかし私はセッションの中でそれを保存していません。トレーニングが終わったので、変数を保存します。私は次のことを行っています:トレーニング後のテンソルフローモデルの保存が完了しました

saver=tf.train.Saver() 
with tf.Session(graph=graph) as sess: 
    save_path = saver.save(sess, "86_model.ckpt") 
    print("Model saved in file: %s" % save_path) 

これが返されます:ValueError:保存する変数がありません。彼らのウェブサイトによると、欠けているものはinitialize_all_variables()です。ドキュメンテーションには、正確に何が行われているかについてはほとんど述べられていませ"初期化"という言葉が私を怖がらせるので、私は訓練されたすべての値をリセットしたくありません。私のモデルを再実行せずに保存する方法はありますか?

+0

'saver.save'は' tf.get_collection(tf.GraphKeys.VARIABLES) 'にすべてを保存します。これは 'tf.Variable'や' tf.get_variable'で変数を作成するたびに更新されるコレクションです。どのように変数を作成しましたか? –

+0

クール、分かりやすくて、私はすべての変数をグラフで作成し、そのネットワークを100K回繰り返して練習し、テストエラーが発生してセッションが終了しました。 tf.Variable()を使って変数を作成しました。私はそれらの訓練された変数にアクセスしてそれらを保存したいが、訓練された変数をリセットすると仮定して初期化を使用したくない。私はUdacityのコースを参考にしています。 – plumSemPy

+0

ええ、セッションを閉じると、変数 –

答えて

1

「セッション」は、テンソルフローのドキュメントのように、訓練されたモデルからの情報を保持するものです。おそらくsess.run()と呼んで、あなたのモデルを訓練しています。あなたがしたいことは、このセーバーオブジェクトで作成した新しいセッションではなく、THATセッションを使用してsess.save()と呼んでください。

0

skflowの使用はいかがですか? skflow(今はskflowがテンソルフローに統合されています)では、コンストラクタにパラメータmodel_dirを指定することができ、トレーニング中に自動的にモデルを保存します(チェックポイントを保存するので、トレーニング中に何かが間違っていれば最後のチェックポイントから再開できます)。

+0

skflowにこの問題があります:http://stackoverflow.com/questions/36597519/adding-regularizer-to-skflow私はKerasを使い終わって、完璧に動作しました。 – plumSemPy

1

私は、あなたが保護者のすべての変数を初期化していないため、それを信じています。これはうまくいくはずです

with tf.Session() as sess: 
     tf.initialize_all_variables().run() 
     saver = tf.train.Saver(tf.all_variables()) 
    -------everything your session does ------------- 
     checkpoint_path = os.path.join(save_dir, 'model.ckpt') 
     saver.save(sess, checkpoint_path, global_step = your_global_step) 
関連する問題