2017-04-10 4 views
1

Ich arbeite an einer einfachen Zeitreihe Regression Problem mit Keras, ich möchte den nächsten Schlusskurs mit den letzten 20 Schlusskurven vorhersagen, habe ich den folgenden Code nach einigen Beispielen gefunden:Python: Probleme Training und Vorhersage der Regression auf Keras

ich mein sequenzielles Modell in einer getrennten Funktion schreiben, wie durch „build_fn“ Parameter benötigt:

def modelcreator(): 
    model = Sequential() 
    model.add(Dense(500, input_shape = (20,),activation='relu')) 
    model.add(Dropout(0.25)) 
    model.add(Dense(250,activation='relu')) 
    model.add(Dense(1,activation='linear')) 

    model.compile(optimizer=optimizers.Adam(), 
       loss=losses.mean_squared_error) 

    return model 

I schaffen das KerasRegressor Objekt übergibt die Modellersteller-Funktion und die gewünschten Fitparameter:

estimator = KerasRegressor(build_fn=modelcreator,nb_epoch=100, batch_size=32) 

Ich trainiere das Modell das KerasRegressor Objekts mit 592 Proben Trog:

self.estimator.fit(X_train, Y_train) 

Und die Probleme beginnen, um zu zeigen, obwohl nb_epoch = 100 nur mein Modell für 10 Epochen Züge:

Epoch 1/10 
592/592 [==============================] - 0s - loss: 6.9555e-05  
Epoch 2/10 
592/592 [==============================] - 0s - loss: 1.2777e-05  
Epoch 3/10 
592/592 [==============================] - 0s - loss: 1.0596e-05  
Epoch 4/10 
592/592 [==============================] - 0s - loss: 8.8115e-06  
Epoch 5/10 
592/592 [==============================] - 0s - loss: 7.4438e-06  
Epoch 6/10 
592/592 [==============================] - 0s - loss: 8.4615e-06  
Epoch 7/10 
592/592 [==============================] - 0s - loss: 6.4859e-06  
Epoch 8/10 
592/592 [==============================] - 0s - loss: 6.9010e-06  
Epoch 9/10 
592/592 [==============================] - 0s - loss: 5.8951e-06  
Epoch 10/10 
592/592 [==============================] - 0s - loss: 7.2253e-06 

Wenn Ich versuche, eine Vorhersage mit einem Datenbeispiel zu erhalten:

Der Vorhersagewert sollte in der Nähe des Bereichs 0,02-0,04 liegen aber wenn ich es drucke, bekomme ich 0,000980315962806344

Q1: Wie kann ich die Trainingsepochen auf den gewünschten Wert einstellen?

Q2: Wie kann ich Vorhersagen mit meinem NN generieren?

Antwort

2

Die erste Sache ist, dass Sie höchstwahrscheinlich Keras 2.0 verwenden, und in dieser Version wurde der Parameter nb_epochs in Epochen umbenannt.

Die zweite Sache ist, dass Sie Ihre Eingänge und Ausgänge auf den Bereich [0, 1] normalisieren müssen. Es wird nicht ohne Normalisierung funktionieren. Um die normierte Ausgabe und den Netzwerkbereich anzupassen, wäre es am besten, eine Sigmoid-Aktivierung an der Ausgabeschicht zu verwenden.

+0

Ändern nb_epochs in Epochen funktioniert wie ein Charme ... Über die Daten: Meine Eingänge und Ausgänge sind bereits im [0,1] Bereich Über die Aktivierungsfunktion: ich änderte es und ich bekomme immer noch niedrige Vorhersagen Ergebnis war: 0.003018886549398303 wenn es sollte waren etwa 0,03 mal besser als mein erster Versuch mit linearer Aktivierung, aber noch nicht ganz da, meine Vermutung ist, dass ich Probleme mit der Architektur des Netzwerks habe und keine Probleme mehr mit den Syntax- und Variablennamen habe ... Danke für deine Hilfe –

+0

@ AndrésRangel Sie könnten Daten in [0, 1] aber auch haben müssen den gesamten Bereich in [0, 1] abdecken, um das Training zu erleichtern. –

1

Ihr Netzwerk konvergiert nicht. Versuchen Sie, die Parameter zu ändern. Der Verlust sollte konsequent sinken. Initialisieren Sie die Parameter ebenfalls ordnungsgemäß.

+0

Welche Parameter soll ich ändern? Ich habe mit anderen neuronalen Netzwerken mit dem gleichen Framework gearbeitet und ich verstehe, dass der Verlust Wert sollte bei jeder Iteration reduzieren oder zumindest konvergieren, aber ich kann Verlust Trend mit nur 10 Iterationen bestätigen ... –

Verwandte Themen