コードの順序が最終結果に影響するという問題が発生しました。最初はコードが動作します。 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_op
とtop_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)
なり誰もがこの問題の原因についての考えを持っていますか?またはこれをデバッグする方法についての任意のアイデア?
実行中のTensorFlowのバージョンは? – mrry
クラスタに予めインストールされたテンソルフローを使用します。どうすればバージョンを知ることができますか? – denru
最も簡単な方法は、 'python -c 'というコマンドをtfとしてインポートすることです。 tf .__バージョン__ ''を出力します。 – mrry