TensorFlow: Lädt tf.train.batch automatisch den nächsten Stapel, wenn der Stapel das Training beendet hat?

9

Zum Beispiel, nachdem ich meine Operationen erstellt, die Batch-Daten durch die Operation gefüttert und die Operation ausgeführt habe, fügt tf.train.batch automatisch einen weiteren Batch von Daten in die Session ein?

Ich frage das, weil tf.train.batch ein Attribut von allow_smaller_final_batch hat, das es ermöglicht, dass die letzte Charge als eine Größe geladen wird, die kleiner ist als die angegebene Chargengröße. Bedeutet dies auch ohne eine Schleife, die nächste Charge könnte automatisch zugeführt werden? Von den Tutorial Codes bin ich ziemlich verwirrt. Wenn ich einen einzelnen Stapel lade, erhalte ich buchstäblich eine einzelne Stapelgröße der Form [Stapelgröße, Höhe, Breite, Anzahl_Kanäle], aber die Dokumentation sagt es Creates batches of tensors in tensors. Auch, wenn ich den Tutorial-Code in der tf-slim Walkthrough-Lernprogramm , wo es eine Funktion namens load_batch gibt, werden nur 3 Tensoren zurückgegeben: images, images_raw, labels . Wo sind "Chargen" von Daten wie in der Dokumentation erläutert?

Danke für Ihre Hilfe.

    
kwotsin 16.01.2017, 10:09
quelle

1 Antwort

10
  

... gibt tf.train.batch automatisch einen weiteren Datenstapel an die Sitzung weiter?

Nein. Nichts passiert automatisch. Sie müssen sess.run(...) erneut aufrufen, um einen neuen Stapel zu laden.

  

Bedeutet dies auch ohne eine Schleife, die nächste Charge könnte automatisch zugeführt werden?

Nein. tf.train.batch(..) lädt immer batch_size Tensoren. Wenn Sie beispielsweise 100 Bilder und ein batch_size=30 haben, dann haben Sie 3 * 30 Stapel, da Sie sess.run(batch) dreimal aufrufen können, bevor die Eingabewarteschlange von Anfang an beginnt (oder anhalten, wenn epoch=1 ). Das bedeutet, dass Sie 100-3*30=10 samples aus dem Training verpassen. Falls Sie sie nicht verpassen möchten, können Sie tf.train.batch(..., allow_smaller_final_batch=True) ausführen, so dass Sie jetzt 3x 30-Sample-Chargen und 1x 10-Sample-Batch haben, bevor die Eingabewarteschlange neu gestartet wird.

Lassen Sie mich das auch mit einem Codebeispiel erläutern:

%Vor%     
bodokaiser 16.01.2017, 12:28
quelle