2016-05-12 69 views
1

我一直在試着讓TensorFlow io api今天早上工作。使用Tensorflow從csv文件加載圖像和標籤

經過一番研究,我設法讀取數據,但當出列時我無法正確地綁定圖像和標籤。

這裏是我寫的代碼:

# 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) 

im_batchlb_batch的順序亂了(圖像必將隨機標籤)。

任何想法發生了什麼?謝謝。

回答

4

您列出的代碼沒有問題。

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

線以上結合圖像和標籤到相同的隊列,所以每當你在任im_batch或lb_batch進行的操作時,隊列將彈出的來自其它數據單元的批號。 因此,一個常見的錯誤可能是在提醒im_batch.eval()和lb_batch.eval()分別:後im_batch.eval

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

()被調用,lb_batch蹦出來的數據單元相同的量,以及因爲他們被綁定在一個隊列中。所以在下一次調用lb_batch.eval()時,它實際上會給出下一批的標籤。

做正確的方法是把im_batch和lb_batch成一個單元操作中,任一圖形或sess.run()運算列表:

  1. 這是正確的

    損耗= your_network_model( im_batch,lb_batch) loss.eval()

2.

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

非常感謝你!這並不像我過去3天花了一些時間改變我的模型,並想知道爲什麼它沒有學到任何東西。 –