2016-05-12 2 views
1

私は今朝TensorFlow io APIを取得しようとしています。Tensorflowを使用してCSVファイルからイメージとラベルをロードする

調査の結果、データを読み込むことができましたが、デキュー時にイメージとラベルを正しくバインドできません。 im_batchlb_batchの順序は(画像はランダムなラベルにバインドされている)台無しにされ

# load csv content 
csv_path = tf.train.string_input_producer(['list1.csv', 'list2.csv']) 
textReader = tf.TextLineReader() 
_, csv_content = textReader.read(csv_path) 
im_name, label = tf.decode_csv(csv_content, record_defaults=[[""], [1]]) 

# load images 
im_content = tf.read_file(im_dir+im_name) 
image = tf.image.decode_png(im_content, channels=3) 
image = tf.cast(image, tf.float32)/255. 
image = tf.image.resize_images(image, 640, 640) 

# make batches 
im_batch, lb_batch = tf.train.batch([image, label], batch_size=batch) 

:ここ

は、私が書いたコードです。

何が起こっているのでしょうか?ありがとう。

答えて

4

あなたのコードは問題ありません。

im_batch, lb_batch = tf.train.batch([image, label], batch_size=batch) 

上記の行は、あなたがim_batchまたはlb_batchのいずれかの操作を実行するたびので、キューが他からのデータ単位のバッチ番号を飛び出します、同じキューに画像とラベルをバインドします。 だからよくある間違いは、別途im_batch.eval()とlb_batch.eval()を呼び出すことがありますだけでなく、データ・ユニットの同じ量を飛び出しlb_batch、()と呼ばれていたim_batch.eval後

# this is wrong 
images = im_batch.eval() 
labels = lb_batch.eval() 

を彼ら理由1つのキューに結合されます。したがって、次にlb_batch.eval()を呼び出すと、実際に次のバッチのラベル​​が与えられます。

  1. この

    損失= your_network_model正しい(:

    行うための正しい方法は、グラフまたはsess.run()OPリストのいずれか、im_batchを入れて、単位操作にlb_batchしますim_batch、lb_batch) loss.eval()

# this is correct 
images, labels = sess.run([im_batch, lb_batch]) 
+0

ありがとうございます!私は過去3日間、私のモデルのすべてを変えて、なぜ何も学んでいないのではないかと思っていたようなものではありません。 –

関連する問題