2016-06-02 5 views
2

Dies ist eine eher konzeptionelle Frage, aber ich muss gestehen, dass ich mich schon eine Weile damit beschäftige.Wie Wiederherstellen der ursprünglichen Werte nach einem Modell in Keras vorhersagen?

Angenommen, Sie möchten ein neurales Netzwerk (NN) trainieren, indem Sie beispielsweise keras verwenden. Wie ist es empfehlenswert, führen Sie vor der eine Normalisierung oder Standardisierung der Daten Ausbildung, so zum Beispiel mit einer Standardisierung:

x_new = (x_old - mean)/standarddev 

Dann tragen Sie sich auf die Ausbildung (model.fit in keras) und den Verlust minimieren Funktion, alles sehr nett.

Bearbeiten: In meinem Fall habe ich eine Reihe von Werten zwischen 200 und 400. Es ist ein NN mit 1 Eingang, 1 Ausgang. Ich standardisiere wie gesagt, die Eingabewerte UND die erwarteten Werte, so dass die NN die Gewichte und Voreingenommenheiten in einer standardisierten Weise lernt.

Stellen Sie sich nun vor, dass ich einen komplett neuen Datensatz mit Werten zwischen 200 und 400 habe und eine Ausgabe mit dem NN mit dem vorherigen Training vorhersagen möchte. Sie können model.predict(x) in Keras verwenden, mit x die völlig neue Reihe von Werten, die ich erhalten habe, standardisiert (oder normalisiert), weil Ihr NN auf diese Weise trainiert wurde. Aber dann, was ich bekomme, nach der predict ist ein Array von Werten standardisiert, , aber ich möchte sie auf den üblichen Bereich von 200 bis 400 zuordnen. Und ich weiß nicht, wie ich das machen soll.

Ich weiß, dass Sie das Training ohne Normalisierung oder Standardisierung fortsetzen können, aber ich habe gelesen, dass wenn Sie standardisieren (oder normalisieren), mit Werten im Bereich der Ausgabe der Einheiten (Neuronen) (zum Beispiel zwischen 0 und 1 für ein Sigmoid), verbessert sich das Training.

Vielen Dank.

+0

Ok - lassen Sie uns überprüfen, ob ich verstanden habe: Sie haben Ihre Daten, die Sie in neuronales Netzwerk eingeben, in einer normalisierten Form - und Sie möchten die ursprünglichen Werte wiederherstellen? Oder möchten Sie Ihre Ausgabe destandarisieren? Und - übrigens. Was ist die Ausgabe Ihrer Funktion? Irgendein Code könnte nützlich sein. –

+0

Ja, ich habe ein 'x' Array von Eingängen und ein' y' Array von Ausgängen mit Werten zwischen 200 und 400. Sie sind beide normalisiert und das Training durchgeführt. Danach habe ich ein neues Array, 'x_2', mit Werten zwischen 200 und 400, und ich möchte ein Ergebnis mit 'vorhergesagt' in Keras vorhersagen. Das Problem ist, dass die NN normal trainiert wurden. Wenn ich dieses neue Array 'x_2' normalisiere, nenne ich es,' y_2' ist normalisiert, und was ich will, ist _denormalize_, um Werte zwischen 200 und 400 zu erhalten. – David

Antwort

2

Ok, denke ich, dass ich habe, was dein Problem richtig ist, so werde ich versuchen, Ihnen zu erklären, wie mit Datennormalisierung behandeln:

1. Annahme über distribiution der Ein- und Ausgänge: in der Regel in neuronalen Netz Training - was Sie annehmen, ist, dass Ihre Daten (sowohl Eingabe als auch Ausgabe) aus einigen Wahrscheinlichkeitsverteilungen stammen: nennen wir es X für Eingabe und Y der Ausgabe. Es gibt einige Gründe, diese Verteilung zu null Mittelwert und mit Einheit Standardabweichung während der Trainingsphase zu machen.

2. Statistischer Teil der Daten Normalisierung und Wiederherstellung: deshalb - Sie müssen eine andere Aufgabe während des Trainings Ihr Netzwerk lösen. Diese Aufgabe besteht darin, die Mittelwert und Standardabweichung der beiden Eingangsverteilung X und Ausgabeverteilung Y zu schätzen. Sie tun dies, indem Sie einfach empirischen Mittelwert und Standardabweichung auf Ihre Trainingsdaten anwenden.

3. Phase Anwendung - Eingänge:, wenn Sie Ihr Modell Neueingabe gelten Sie auch davon aus, dass die Eingabe von distribiution kommt X so müssen Sie es auch standardisieren Mittelwert von Null und Einheit sein Standardabweichung und hier ist ein lustiger Teil - Sie können beide Trainingssatz und eine Reihe neuer Daten verwenden, um eine noch bessere Schätzung von Mittelwert und Standardabweichung von X zu erhalten, aber Überanpassung im Validierungsfall zu vermeiden - Sie verwenden normalerweise den Mittelwert und Standardabweichung während der Trainingsphase, um neue Daten standardisiert zu machen.

4. Anwendungsphase - Ausgänge: dieser Teil ist schwieriger, weil, wenn Sie Ihr Netzwerk auf neue genormte Eingänge gelten Sie neue Ausgaben von Y * ~ erhalten (Y - mean '(Y))/sd' (Y) wo mean '(Y) und sd' (Y) ist Schätzung der Abweichung Mittelwert und Standard eingestellt empirisch aus Ihrer Ausbildung erhielt und Y original distribiution Ihre Ausgabe ist. Das liegt daran, dass Sie während der Trainingseinheit Ihren Optimierer mit Ausgabedaten aus dieser Distribution versorgen. Um also Ihre Ausgaben zu restaurieren, müssen Sie eine Transformation anwenden: Y * * sd '(Y) + Mittelwert' (Y). was umgekehrt zur Standardisierungstransformation ist.

ZUSAMMENFASSUNG:

Ihre Ausbildung und Bewerbungsphase sieht folgende: sowohl Trainingsphase und Anwendungsphase benötigen für durch Berechnung empirischen Mittelwert und Standardabweichung der Trainingseingänge

  1. Sie Statistiken zu erhalten (mean '(X) und sd' (X) und empirische Mittelwert und Standardabweichung Ihrer Ausgänge (bedeuten '(Y) und sd '(Y)).Es ist wichtig, sie zu speichern, da sie in der Anwendungsphase benötigt werden.
  2. Sie standardisieren Ihre Eingabe- und Ausgabedaten als null Mittelwert und Einheit Standardabweichung und trainieren Sie Ihr Modell auf ihnen.
  3. Während Bewerbungsphase standardisieren Sie Ihre Eingaben, indem sie durch gespeicherte mean ‚(X) und Dividieren durch gespeicherte sd‘ (X) Subtrahieren neue Ausgabe Y *
  4. Sie destandarize Ihre Ausgaben gespeichert sind zu erhalten mean '(Y) und sd' (Y) - während Trainingsphase erhalten. - durch Transformation (Y * * sd '(Y) + bedeuten' (Y)

ich hoffe, dass Diese Antwort wird Ihr Problem lösen und Ihnen keine Zweifel über Details der Standardisierung und Destandarisierung Ihrer Daten geben :)

+0

Ok, Marcin, ich denke das löst mein Problem, danke. Ich weiß, wie man es anwendet, aber ich glaube, ich habe immer noch einen konzeptuellen Zweifel: Warum muss ich immer das Mittel '(X) und Mittel' (Y) (und dasselbe für Std) der Trainingsphase verwenden? Das ist mir seltsam, weil Sie den Mittelwert des neuen Datasets zur Vorhersage verwenden können (sagen wir mal '' (X_new)), was näher am tatsächlichen Mittelwert des Eingabe-Datasets der Vorhersage liegt. – David

+1

Es gibt mindestens drei Gründe: 1. Sowohl neue als auch alte Werte sollten aus der gleichen Distribution kommen - also spielt es keine Rolle. 2. Ihr Modell wurde anhand von alten Daten gelernt. 3. Sie kennen die Leistung Ihres Modells mit der alten Normalisierung. Die Erstellung von Statistiken aus neuen Daten kann aufgrund von Verzerrungen in Ihrem neuen Datensatz, die Sie nicht erkennen können, riskant sein. –

+0

Ok, Marcin. Ich denke ich verstehe. Danke für alles. – David

1

Je nachdem, ob Sie standardisieren Ihre Ausgaben oder nicht:

1. Wenn nicht: dann sind Ihre Ausgangswerte nicht genormt und Sie müssen sich nicht darum kümmern.

2. Wenn ja: dann halten Sie Ihre Mittelwert/sd und unstadarize Ausgabe einfach durch (output * sd) + mean.

+0

Marcin, danke für deine Antwort, aber ich habe Angst Ich verstehe dich nicht vollständig. Ich werde meine Frage bearbeiten, um sie klarer zu machen. – David

1

Sie standarized Ihre Eingabe/Ausgabe-Werte mit der folgenden Formel:

X_s = (X - mean)/std 

Um destandarize, müssen Sie die mittleren und Standardwerte für die Ein- und Ausgänge haben. Speichern Sie sie irgendwo und dann verwenden Sie die folgende Gleichung:

X = X_s * std + mean 

Zum Beispiel, sagen wir mal, dass für [200, 400] Bereich, der Mittelwert 300 und die Standardabweichung ist 100. Dann sagen, für einen normalisierten Wert der nicht normalisierten Wert von 0,5, ist:

X = 0.5 * 100 + 300 = 350 

Wenn Sie den Mittelwert/std speichern haben, dann haben Sie keine Möglichkeit, die ursprünglichen Werte zurückzugewinnen.

+0

Ja, das weiß ich. Sie können dies tun, um nach der Trainingsphase zu destandarisieren. Das Problem ist, dass Sie bei einem neuen Datensatz für Vorhersagen einen neuen Mittelwert und eine neue Standardabweichung verwenden müssen, oder vielleicht die alten? Das waren meine Zweifel. Aber danke für deine Antwort. – David

+1

@David verwenden Sie diejenigen, die verwendet wurden, wenn Sie das Netzwerk trainiert haben, das ist, was Sie alte nennen. –

Verwandte Themen