Come si ottengono le code di esempio di TensorFlow in lotti appropriati per l'allenamento?Come leggere i dati nei batch TensorFlow dalla coda di esempio?
Ho alcune immagini ed etichette:
IMG_6642.JPG 1
IMG_6643.JPG 2
(sentitevi liberi di suggerire un altro formato di etichetta; credo di bisogno di un'altra fitta al passo rada ...)
ho leggere un bel po 'di tutorial, ma non ancora abbastanza insieme. Ecco cosa ho, con commenti che indicano i passaggi richiesti dalla pagina Reading Data di TensorFlow.
- L'elenco dei nomi dei file (passaggi facoltativi rimosse per semplicità)
- coda Nome file
- A Reader per il formato di file
- un decoder per un record letto dal lettore
- Esempio di coda
E dopo la coda di esempio ho bisogno di ottenere questa coda in lotti per l'allenamento; è lì che mi sono bloccato ...
1. Elenco di nomi di file
files = tf.train.match_filenames_once('*.JPG')
4. coda Nome file
filename_queue = tf.train.string_input_producer(files, num_epochs=None, shuffle=True, seed=None, shared_name=None, name=None)
5. Un lettore
reader = tf.TextLineReader() key, value = reader.read(filename_queue)
6. Un decoder
record_defaults = [[""], [1]] col1, col2 = tf.decode_csv(value, record_defaults=record_defaults)
(non credo che ho bisogno di questo gradino sotto perché ho già la mia etichetta in un tensore ma io includo comunque)
features = tf.pack([col2])
La pagina di documentazione ha un esempio per eseguire un'immagine, non ottenere le immagini e le etichette in lotti:
for i in range(1200): # Retrieve a single instance: example, label = sess.run([features, col5])
E poi sotto di esso ha una sezione di calcestruzzo:
def read_my_file_format(filename_queue):
reader = tf.SomeReader()
key, record_string = reader.read(filename_queue)
example, label = tf.some_decoder(record_string)
processed_example = some_processing(example)
return processed_example, label
def input_pipeline(filenames, batch_size, num_epochs=None):
filename_queue = tf.train.string_input_producer(
filenames, num_epochs=num_epochs, shuffle=True)
example, label = read_my_file_format(filename_queue)
# min_after_dequeue defines how big a buffer we will randomly sample
# from -- bigger means better shuffling but slower start up and more
# memory used.
# capacity must be larger than min_after_dequeue and the amount larger
# determines the maximum we will prefetch. Recommendation:
# min_after_dequeue + (num_threads + a small safety margin) * batch_size
min_after_dequeue = 10000
capacity = min_after_dequeue + 3 * batch_size
example_batch, label_batch = tf.train.shuffle_batch(
[example, label], batch_size=batch_size, capacity=capacity,
min_after_dequeue=min_after_dequeue)
return example_batch, label_batch
La mia domanda è: come si usa il codice di esempio di cui sopra con il codice che ho sopra? Ho bisogno di lotti con cui lavorare e la maggior parte delle esercitazioni viene già fornita con i gruppi mnist.
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
total_batch = int(mnist.train.num_examples/batch_size)
# Loop over all batches
for i in range(total_batch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
hai trovato una soluzione per questo? – user3639557
Sto anche cercando una spiegazione. Ho l'impressione che l'esempio mnist elabori l'output per creare un "costo" che rende il codice troppo specifico. Non riesco a trovare nessun altro esempio per aiutarmi a risolverlo. – rtmc