Ich ging durch das CIFAR-10-Beispiel im TensorFlow-Leitfaden für den Start von CNN
Jetzt in der Zugfunktion in cifar10_train.py erhalten wir Bilder als
%Vor% In der Funktion distorted_inputs()
generieren wir die Dateinamen in einer Warteschlange und lesen dann einen einzelnen Datensatz als
Wenn ich Debugging-Code hinzufüge, enthält die Variable read_input
nur einen Datensatz mit einem Bild und seiner Höhe, Breite und seinem Namen.
Das Beispiel wendet dann eine gewisse Verzerrung auf das gelesene Bild / Datensatz an und übergibt es dann an die Funktion _generate_image_and_label_batch()
.
Diese Funktion gibt dann einen 4D Tensor der Form [batch_size, 32, 32, 3]
mit batch_size = 128
zurück.
Die obige Funktion verwendet die Funktion tf.train.shuffle_batch()
, wenn der Stapel zurückgegeben wird.
Meine Frage ist, woher kommen die zusätzlichen Datensätze in der Funktion tf.train.shuffle_batch()
? Wir geben keine Dateinamen oder Leserobjekte weiter.
Kann jemand etwas darüber erzählen, wie wir von 1 auf 128 Platten gehen? Ich habe in die Dokumentation geschaut, aber nicht verstanden.
Die Funktion tf.train.shuffle_batch()
kann verwendet werden, um (ein oder mehr) Tensoren, die eine Menge von Eingaben enthalten. Intern erstellt tf.train.shuffle_batch()
eine tf.RandomShuffleQueue
, auf der q.enqueue()
mit den Bild- und Label-Tensoren, um ein einzelnes Element in die Warteschlange einzureihen ( Bild-Label-Paar). Es gibt dann das Ergebnis von q.dequeue_many(batch_size)
zurück, das% co_de verkettet % zufällig ausgewählte Elemente (Bild-Label-Paare) in einen Stapel von Bildern und einen Stapel von Etiketten.
Beachten Sie, dass, obwohl es aus dem Code wie batch_size
und read_input
eine funktionale Beziehung hat, eine zusätzliche Falte auftritt. Die Auswertung des Ergebnisses von filename_queue
wird für immer blockiert, da der internen Warteschlange keine Elemente hinzugefügt wurden. Um dies zu vereinfachen, fügt TensorFlow beim Aufruf von tf.train.shuffle_batch()
ein tf.train.shuffle_batch()
zu einer internen Sammlung in der Grafik. Ein späterer Aufruf an QueueRunner
(zB hier in tf.train.start_queue_runners()
) startet einen Thread, der Elemente zur Warteschlange hinzufügt, und ermöglicht, dass das Training fortschreitet. Das Threading- und Warteschlangen-HOWTO enthält weitere Informationen zur Funktionsweise.
Tags und Links neural-network tensorflow machine-learning