2016-08-26 5 views
0

コードの順序が最終結果に影響するという問題が発生しました。最初はコードが動作します。 1行移動すると、テンソルフローでエラーが発生します。例えばコードの順序が最終結果に影響する

作業バージョン:

probs = net.get_output() 
label_node = tf.placeholder(tf.int32, name='label_node') 
top_1_op = tf.nn.in_top_k(probs, label_node, 1) 
top_5_op = tf.nn.in_top_k(probs, label_node, 5) 
threads = image_producer.start(session=sess, coordinator=coordinator) 
for (labels, images) in image_producer.batches(sess): 
    top_1_result, top_5_result = sess.run([top_1_op, top_5_op], 
            feed_dict={input_node: images, label_node: labels}) 

非稼働バージョン:

threads = image_producer.start(session=sess, coordinator=coordinator) # move here 
probs = net.get_output() 
label_node = tf.placeholder(tf.int32, name='label_node') 
top_1_op = tf.nn.in_top_k(probs, label_node, 1) 
top_5_op = tf.nn.in_top_k(probs, label_node, 5) 
for (labels, images) in image_producer.batches(sess): 
    top_1_result, top_5_result = sess.run([top_1_op, top_5_op], 
            feed_dict={input_node: images, label_node: labels}) 

Tensorflowが生成するエラー

"tensorflow.python.framework.errors.NotFoundError: FeedInputs: unable to find feed output label_node:0". 

ご覧のとおり、tensorflowは "label_node:0"を見つけることができます。実際には、テンソルフローはtop_1_optop_5_opのいずれも見つかりません。

image_producer.startの内容は次のように何かである:

op_A = ... 
queue_runner = tf.train.QueueRunner(queue_B, [op_B] * num_concurrent) 
session.run(op_A) 
t = queue_runner.create_threads(session, coord=coordinator, start=True) 

もっと奇妙なことは、私はimage_producer.startに2行を追加した後、非実行可能なバージョンでは、コードが再び動作することです。例えば、image_producer.start

op_C = ... # new 
session.run(op_C) # new 
op_A = ... 
queue_runner = tf.train.QueueRunner(queue_B, [op_B] * num_concurrent) 
session.run(op_A) 
t = queue_runner.create_threads(session, coord=coordinator, start=True) 

なり誰もがこの問題の原因についての考えを持っていますか?またはこれをデバッグする方法についての任意のアイデア?

+0

実行中のTensorFlowのバージョンは? – mrry

+0

クラスタに予めインストールされたテンソルフローを使用します。どうすればバージョンを知ることができますか? – denru

+0

最も簡単な方法は、 'python -c 'というコマンドをtfとしてインポートすることです。 tf .__バージョン__ ''を出力します。 – mrry

答えて

1

TensorFlow 0.9.0がリリースされた後に修正されたbugに苦しんでいるようです。そのバージョン(およびそれ以前)では、TensorFlowは、キューランナー(またはsess.run()を呼び出す他のスレッド)が開始した後にグラフを変更すると、回復不能なエラーにつながる競合状態に陥りました。バージョン0.9.0の唯一の回避策は、の後にキューランナー(image_producer、コード内)を開始し、グラフが完全に構築されていることです。

+0

ありがとうございます。管理者にそれを0.10にアップグレードするように依頼し、この問題が解決されているかどうかを確認します。 – denru

関連する問題