Wie erhält die Funktion "deformed_inputs ()" im TensorFlow CIFAR-10-Beispiel-Tutorial 128 Bilder pro Stapel?

8

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

%Vor%

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.

    
t0mkaka 04.01.2016, 10:43
quelle

1 Antwort

7

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.

    
mrry 04.01.2016, 15:50
quelle