2016-11-22 9 views
1

Ich habe bitte zwei Fragen nach dem ImageDataGenerator:Augementations in Keras ImageDataGenerator

1) gleich auf der gesamten Charge verwendeten Augmentationen oder jedes Bild bekommt seine eigene zufällige Transformation? z.B. dreht das Modul alle Bilder im Stapel mit demselben Winkel oder erhält jedes Bild einen zufälligen Drehwinkel?

2) Die Daten in ImageDataGenerator.flow werden unbegrenzt (in Stapeln) durchlaufen. Gibt es eine Möglichkeit, diese Endlosschleife zu stoppen, d. H. Die Augmentation nur für eine Anzahl von Malen durchzuführen. Weil ich die batch_size in jedem Schritt (nicht jede Epoche) ändern muss. Dank

Antwort

1

Antwort von Francois Chollet:

1) sind die gleichen auf die gesamte Charge verwendet Augmentationen oder jedes Bild bekommt seine eigene zufällige Transformation? z.B. dreht das Modul alle Bilder im Stapel mit demselben Winkel oder erhält jedes Bild einen zufälligen Drehwinkel?

Jede einzelne Probe hat eine andere eindeutige Transformation (z. B. eine zufällige Rotation innerhalb eines bestimmten Bereichs).

2) Die Daten in ImageDataGenerator.flow werden unbegrenzt (in Stapeln) durchlaufen. Gibt es eine Möglichkeit, diese Endlosschleife zu stoppen, d. H. Die Augmentation nur für eine Anzahl von Malen durchzuführen. Weil ich die batch_size in jedem Schritt (nicht jede Epoche) ändern muss. Danke

Unklar was hier gemeint ist. Wenn Sie jedoch model.fit_generator(ImageDataGenerator.flow()) verwenden, können Sie samples_per_epoch=... angeben, um nur eine bestimmte Anzahl von Stichproben vom Generator zu erhalten. Wenn Sie Batch-Ebene Granularität möchten, können Sie tun:

for x, y in model.fit_generator(ImageDataGenerator.flow()): 
    model.train_on_batch(x, y) 

In diesem Fall können Sie nur break (es ist eine Schleife) nach einer beliebigen Anzahl von Chargen, die Sie möchten.

0

@Neal: Vielen Dank für die schnelle Antwort! Du hattest recht, wahrscheinlich muss ich meine Aufgabe besser erklären. Meine Arbeit ähnelt der Klassifizierung von Videosequenzen, aber meine Daten werden in einer Datenbank gespeichert. Ich möchte meinen Code diese Schritte für eine Epoche folgen:
Denn i (number_of_sequences):

  1. Get N, die Anzahl der Frames in der Sequenz i (ich glaube, das ist entspricht batch_size, die Zahl der N jede Sequenz wird bereits in einer Liste gespeichert)
  2. Fetch N aufeinanderfolgenden Rahmen aus meiner Datenbank und ihre Etiketten: X_train, y_train
  3. Für j in range (number_of_rotation): -
    1. Pe rform (gleich) Daten Augmentation auf allen Frames der Sequenz (wahrscheinlich mit datagen = ImageDataGenerator() und datagen.flow())
    2. Zug das Netzwerk auf X, y

Mein erster Gedanke wurde mit model.fit_generator (Generator = ImageDataGenerator().flow()) aber auf diese Weise kann ich meine Batch_Size nicht ändern, und ehrlich gesagt habe ich Ihre Lösung nicht verstanden. Sorry für den langen Post, aber ich bin immer noch ein Neuling in Python und NN, aber ich bin wirklich ein großer Fan von Keras;) Thnx!

Verwandte Themen