2016-07-28 5 views
6

私はテンソルフローCNNを書きましたが、すでに訓練されています。私はいくつかのサンプルにそれを実行するためにそれを復元したいが、残念ながらその吐きアウト:Tensorflow ValueError:保存する変数がありません

ValueError: No variables to save

マイevalのコードはここで見つけることができます:

import tensorflow as tf 

import main 
import Process 
import Input 

eval_dir = "/Users/Zanhuang/Desktop/NNP/model.ckpt-30" 
checkpoint_dir = "/Users/Zanhuang/Desktop/NNP/checkpoint" 

init_op = tf.initialize_all_variables() 
saver = tf.train.Saver() 

def evaluate(): 
    with tf.Graph().as_default() as g: 
    sess.run(init_op) 

    ckpt = tf.train.get_checkpoint_state(checkpoint_dir) 

    saver.restore(sess, eval_dir) 

    images, labels = Process.eval_inputs(eval_data = eval_data) 

    forward_propgation_results = Process.forward_propagation(images) 

    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    print(top_k_op) 

def main(argv=None): 
    evaluate() 

if __name__ == '__main__': 
    tf.app.run() 

答えて

10

tf.train.Saver後の変数を作成する必要があります復元する(または保存する)必要があります。さらに、これらの変数と同じグラフに作成する必要があります。

forward_propgation_results = Process.forward_propagation(images) 

また、あなたはあなたのようtf.Sessionコンストラクタに作成した新しいtf.Graphを渡す必要があります。Process.forward_propagation(…)も、この行は動作するはずです後セーバーの作成を追加し、モデル内の変数を作成すると仮定すると

ブロックwithの中にsessの作成を移動する必要があります。

結果の関数のようなものになります。

def evaluate(): 
    with tf.Graph().as_default() as g: 
    images, labels = Process.eval_inputs(eval_data = eval_data) 
    forward_propgation_results = Process.forward_propagation(images) 
    init_op = tf.initialize_all_variables() 
    saver = tf.train.Saver() 
    top_k_op = tf.nn.in_top_k(forward_propgation_results, labels, 1) 

    with tf.Session(graph=g) as sess: 
    sess.run(init_op) 
    saver.restore(sess, eval_dir) 
    print(sess.run(top_k_op)) 
+0

私はevalのデータ= evalのデータを削除しなかったし、それはまだ動作するはずですが、どうもありがとうございました。今は私がプログラムを実行すると、Pythonは何も出力しません。 –

+0

'eval_data'の出所が分からないのは、あなたの例でその名前が束縛されていないからです。 'Process.eval_inputs()'は入力パイプラインを使用していますか?おそらく 'saver.restore()'の実行後に 'tf.train.start_queue_runners(sess = sess)を追加する必要があります。 – mrry

+0

ありがとうございます。コードは修正されていますが、その行を追加した後で新しいエラーが発生しました。 Eテンソルフロー/コア/クライアント/テンソル_c_api.cc:485]ターゲット[0]が範囲外です –

関連する問題