Wie funktioniert die Datennormalisierung in Keras während der Vorhersage?

8

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?

    
Alex Taylor 25.01.2017, 15:33
quelle

4 Antworten

11

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:

%Vor%

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 ).

    
Marcin Możejko 25.01.2017, 15:51
quelle
10

Verwenden Sie die Methode standardize des Generators für jedes Element. Hier ist ein vollständiges Beispiel für CIFAR 10:

%Vor%     
Martin Thoma 28.03.2017 12:20
quelle
2

Ich verwende die Funktion datagen.fit selbst.

%Vor%

Idealerweise lernt test_datagen auf Trainingsdatensatz die Statistiken der Trainingsdatensätze. Dann verwendet es diese Statistiken, um Testdaten zu normalisieren.

    
Hari 12.05.2017 06:14
quelle
0

Ich hatte auch das gleiche Problem und ich löste es mit der gleichen Funktionalität, die das ImageDataGenerator verwendet:

%Vor%

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.

    
Alexander Pacha 22.03.2017 07:54
quelle