2016-05-12 9 views
1

Ich habe versucht, den TensorFlow io api heute Morgen zu arbeiten.Laden von Bildern und Etiketten aus CSV-Datei mit Tensorflow

Nach einigem Nachforschen gelang es mir, die Daten einzulesen, aber ich kann Bild und Label nicht korrekt binden, wenn es aus der Warteschlange genommen wird. Hier

ist der Code, den ich schrieb:

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

Die Reihenfolge der im_batch und lb_batch ist durcheinander (die Bilder sind gebunden, um zufällige Etiketten).

Irgendeine Idee was passiert? Vielen Dank.

Antwort

4

Der von Ihnen gelistete Code hat kein Problem.

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

Die Linie oben bindet Bild und Etikett auf die gleiche Warteschlange, so, wenn Sie auf beide im_batch oder lb_batch eine Operation durchführen, wird die Warteschlange eine Chargennummer von Dateneinheiten aus dem anderen herausspringen. So ein häufiger Fehler im_batch.eval anrufen kann() und lb_batch.eval() getrennt:

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

nach im_batch.eval() aufgerufen wurde, lb_batch auch die gleiche Menge an Dateneinheiten aus Pop, weil sie sind in einer Warteschlange verbunden. Wenn Sie lb_batch.eval() als nächstes aufrufen, werden die Etiketten des nächsten Stapels angezeigt.

Der richtige Weg ist zu tun im_batch zu setzen und zu einer Einheit Betrieb lb_batch, entweder ein Graph oder sess.run() op Liste:

  1. diese

    Verlust korrekt ist = your_network_model (im_batch, lb_batch) loss.eval()

2.

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

Vielen Dank !! Es ist nicht so, dass ich die letzten 3 Tage damit verbracht habe, alles an meinem Modell zu ändern und mich zu wundern, warum es nichts lernt. –

Verwandte Themen