1

ファイル名のリストからテンソルフローでキューを作成しようとしています。リストが作成されましたが、文字列入力プロデューサが空のキューを返したようです。コードが機能しないその他の理由があるかもしれません。以下はコードですテンソルフローstring_input_producerは空のキューを与えます

sess = tf.InteractiveSession() 

def read_my_file_format(filename_queue): 
    reader = tf.WholeFileReader() 
    key, value = reader.read(filename_queue) 
    images = tf.image.decode_jpeg(value, channels=3) 
    return images, key 

def input_pipeline(filenames, batch_size, num_epochs, labels): 
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False) 
    image, key = read_my_file_format(filename_queue) 
    return image, key 

sess.run(tf.global_variables_initializer()) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True) 

input_pipeline(trainnames, batch_size, None, labels) 

coord.request_stop() 
coord.join(threads) 

答えて

0

エラーメッセージを表示することができます。

  • あなたのキューに関連付けられているTensorFlow演算子を定義し、あなたがあればsess.run(tf.global_variables_initializer())を呼び出す前に呼び出す必要がありますので、グラフに追加しますinput_pipeline方法:ここでは、同じ時間で

    は、あなたのコードには、いくつかの発言がありますコーディネーターによってキューが開始されるようにするには、キューをグラフの一部にし、start_queue_runnersを呼び出す前にします。

  • 実際にimage, key演算子を実行するようにTensorFlowに依頼していません。ここで

私がしようとするだろうコードです:

sess = tf.InteractiveSession() 

def read_my_file_format(filename_queue): 
    reader = tf.WholeFileReader() 
    key, value = reader.read(filename_queue) 
    images = tf.image.decode_jpeg(value, channels=3) 
    return images, key 

def input_pipeline(filenames, batch_size, num_epochs, labels): 
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False) 
    image, key = read_my_file_format(filename_queue) 
    return image, key 

# Let us define the queue operators and add them to the default graph. 
image, key = input_pipeline(trainnames, batch_size, None, labels) 

sess.run(tf.global_variables_initializer()) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True) 

# Let's run the image, key tensors. 
sess.run([image, key]) 

coord.request_stop() 
coord.join(threads) 
+0

はあなたにもグラフでパイプラインを結合する方法を教えていただけますか?私は、グラフのプレースホルダにテンソルを与えることができないことを知りました。この場合、グラフに入力する必要がありますか?列車セットと2つの異なるキューにテストセットがあります。両方を1つのグラフに入力することは可能ですか?グラフを関数として定義すると、呼び出すたびに新しいグラフが作成されるか、同じ古いグラフが返されます。 – ALeex

+0

基本的に、パイプライン(例えば、 'filename_queue'、' image'、 'key'、...)はグラフの一部です。 feed_dictを使用してプレースホルダテンソルを手動でフィードしたくない場合は、画像テンソルを使用してグラフに直接フィードできます。基本的には、プレースホルダを使用したときと同じように、デキューを使用します。 [reading_dataセクション](https://www.tensorflow.org/programmers_guide/reading_data)を読んで例を見てみることをお勧めします。 あなたの最後の質問については、この[section](https://www.tensorflow.org/programmers_guide/variables)に興味があるかもしれません。 – npf

+0

私は助けてくれてありがとう私は質問を開く前にそれを読んだことがあるが、私はまだそれを読んだ後に何をすべきか分からない。そこで、グラフにfilename_queue、im​​age、およびkeyを追加します。 'sess.run([image、key])'を実行すると、デキューしてグラフを通過すると思いますか?それとも、訓練をせずにイメージテンソルを取得するだけですか?グラフのパイプライン部分を作るために、トレーニングセットとテストセットの両方のパイプラインを与える方法を見つけられませんでしたが、これについて知っていますか? – ALeex

関連する問題