Ich sehe, dass der imageDataGenerator mir erlaubt, verschiedene Stile der Datennormalisierung anzugeben, z. featurewise_center, samplewise_center usw.
Aus den Beispielen ersehe ich, dass ich, wenn ich eine dieser Optionen anführe, die Fit-Methode des Generators aufrufen muss, damit der Generator Statistiken wie das mittlere Bild des Generators berechnen kann.
%Vor%Meine Frage ist, wie funktioniert die Vorhersage, wenn ich während des Trainings eine Datennormalisierung angegeben habe? Ich kann nicht sehen, wie ich in dem Rahmen sogar das Wissen über die mittlere / mittlere Abweichung des Trainingssatzes weitergeben würde, um mir zu erlauben, meine Testdaten selbst zu normalisieren, aber ich sehe auch nicht im Trainingscode, wo diese Information ist gespeichert.
Sind die für die Normalisierung benötigten Bildstatistiken im Modell gespeichert, damit sie während der Vorhersage verwendet werden können?
Ja - das ist ein wirklich großer Nachteil von Keras.ImageDataGenerator
, dass Sie die Standardisierungsstatistiken nicht selbst bereitstellen konnten. Aber - es gibt eine einfache Methode, um dieses Problem zu lösen.
Angenommen, Sie haben eine Funktion normalize(x)
, die ein Bild Stapel normalisiert (denken Sie daran, dass der Generator kein einfaches Bild liefert, sondern ein Array von Bildern - ein Stapel ) Mit der Form (nr_of_examples_in_batch, image_dims ..)
können Sie Ihren eigenen Generator mit Normalisierung erstellen:
Dann können Sie einfach gen_with_norm(datagen.flow, normalize)
anstelle von datagen.flow
verwenden.
Darüber hinaus können Sie die mean
und std
, die mit einer fit
-Methode berechnet wurden, wiederherstellen, indem Sie sie aus den entsprechenden Feldern in datagen abrufen (z. B. datagen.mean
und datagen.std
).
Verwenden Sie die Methode standardize
des Generators für jedes Element. Hier ist ein vollständiges Beispiel für CIFAR 10:
Ich hatte auch das gleiche Problem und ich löste es mit der gleichen Funktionalität, die das ImageDataGenerator
verwendet:
Beachten Sie, dass dies nur möglich ist, wenn Sie einen vernünftigen kleinen Datensatz wie CIFAR-10 haben. Ansonsten klingt die Lösung, die von Marcin vorgeschlagen wurde , viel vernünftiger.
Tags und Links python neural-network tensorflow machine-learning keras