Ich habe einen Trainingssatz von 614 Bildern, die bereits gemischt wurden. Ich möchte die Bilder der Reihe nach in 5er-Schritten lesen. Da meine Etiketten in der gleichen Reihenfolge angeordnet sind, führt ein Verschieben der Bilder beim Einlesen in die Charge zu einer falschen Beschriftung.TensorFlow: Lesen von Bildern in der Warteschlange ohne Mischen
Das sind meine Funktionen zu lesen und die Bilder auf die Batch-Verarbeitung:
# To add files from queue to a batch:
def add_to_batch(image):
print('Adding to batch')
image_batch = tf.train.batch([image],batch_size=5,num_threads=1,capacity=614)
# Add to summary
tf.image_summary('images',image_batch,max_images=30)
return image_batch
# To read files in queue and process:
def get_batch():
# Create filename queue of images to read
filenames = [('/media/jessica/Jessica/TensorFlow/StreetView/training/original/train_%d.png' % i) for i in range(1,614)]
filename_queue = tf.train.string_input_producer(filenames,shuffle=False,capacity=614)
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
# Read and process image
# Image is 500 x 275:
my_image = tf.image.decode_png(value)
my_image_float = tf.cast(my_image,tf.float32)
my_image_float = tf.reshape(my_image_float,[275,500,4])
return add_to_batch(my_image_float)
Diese meine Funktion ist die Vorhersage auszuführen:
def inference(x):
< Perform convolution, pooling etc.>
return y_conv
Diese meine Funktion ist der Verlust zu berechnen und durchführen Optimierung:
def train_step(y_label,y_conv):
""" Calculate loss """
# Cross-entropy
loss = -tf.reduce_sum(y_label*tf.log(y_conv + 1e-9))
# Add to summary
tf.scalar_summary('loss',loss)
""" Optimisation """
opt = tf.train.AdamOptimizer().minimize(loss)
return loss
Das ist meine Hauptfunktion:
Wenn ich meine image_summary
überprüfe, scheinen die Bilder nicht in der Reihenfolge zu sein. Oder besser gesagt, was passiert ist:
Bilder 1-5: verworfen, Bilder 6-10: lesen, Bilder 11-15: verworfen, Bilder 16-20: lesen usw.
So sieht es aus wie ich bekomme ich meine Chargen zweimal, werfe die erste weg und benutze die zweite? Ich habe ein paar Mittel ausprobiert, aber nichts scheint zu funktionieren. Ich habe das Gefühl, dass ich etwas grundsätzlich falsch verstehe, wenn ich images = get_batch()
und sess.run()
anrufe.
Welche Version von Tensorflow verwenden Sie? Funktioniert es mit weniger Bildern? Versuchen Sie mit Batch = 1 – fabrizioM