2

Ich versuche Keras LSTM-Modell zu trainieren, um die nächste Zahl in einer Sequenz vorherzusagen.Keras-Modell zur Vorhersage der Zahlenfolge

  1. Was unten mit meinem Modell falsch ist, wie debuggen ich, wenn ein Modell nicht
  2. Lernen ist
  3. Wie kann ich entscheiden, welche Typen Schicht
  4. On verwenden welcher Grundlage sollte ich wählen Verlust und Optimierer params während

Meine Eingangsdaten Ausbildung ist das Kompilieren von Form (16000, 10) wie unter

[ 
    [14955 14956 14957 14958 14959 14960 14961 14962 14963 14964] 
    [14731 14732 14733 14734 14735 14736 14737 14738 14739 14740] 
    [35821 35822 35823 35824 35825 35826 35827 35828 35829 35830] 
    [12379 12380 12381 12382 12383 12384 12385 12386 12387 12388] 
    ... 
] 

entspre ding Ausgangstrainingsdaten sind die Form (16000, 1) wie unten

[[14965] [14741] [35831] [12389] ...] 

Als LSTM beschwert ist, I neu geformt ist Training/Testdaten

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1) 
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1) 

Hier letzten Training/Testdatenform

Total Samples: 20000 
X_train: (16000, 10, 1) 
y_train: (16000, 1) 
X_test: (4000, 10, 1) 
y_test: (4000, 1) 

Hier ist mein Modell

# Model configuration 
epochs = 2 
batch_size = 32 
hidden_neurons = 100 
output_size = 1 

# Create the model 
model = Sequential() 
model.add(LSTM(hidden_neurons, input_shape=(X_train.shape[1], X_train.shape[2]))) 
model.add(Dense(output_size)) 
model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy']) 
print(model.summary()) 
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size) 

scores = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=0) 
print("Model Accuracy: %.2f%%" % (scores[1]*100)) 

Hier ist mein Ausgang

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
lstm_3 (LSTM)    (None, 100)    40800  
_________________________________________________________________ 
dense_3 (Dense)    (None, 1)     101  
================================================================= 
Total params: 40,901 
Trainable params: 40,901 
Non-trainable params: 0 
_________________________________________________________________ 
None 
Epoch 1/2 
16000/16000 [==============================] - 11s - loss: 533418575.3600 - acc: 0.0000e+00  
Epoch 2/2 
16000/16000 [==============================] - 10s - loss: 532474289.7280 - acc: 6.2500e-05  
Model Accuracy: 0.00% 
+0

haben Sie es mit mehr als 2 Epochen versucht? –

+0

Ja, ich habe sogar 10 Epochen probiert, aber der Verlust sinkt nicht sehr, die Genauigkeit bleibt 0 – Mosu

+0

Das sieht wie ein Regressionsproblem aus, in diesem Fall macht die Genauigkeit keinen Sinn. –

Antwort

1

diesen Code versuchen:

epochs = 30 
batch_size = 64 
hidden_neurons = 32 
output_size = 1 

# Create the model 
model = Sequential() 
model.add(LSTM(hidden_neurons, input_shape=(X_train.shape[1], X_train.shape[2]))) 
model.add(Dense(output_size, activation = 'elu')) 

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy']) 
print(model.summary()) 
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size) 

scores = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=0) 
print("Model Accuracy: %.2f%%" % (scores[1]*100)) 

im Allgemeinen, es ist wirklich schwer, Ihnen zu helfen, weil wir Art von reproduzierbarem Beispiel benötigen, die wir testen können. Allerdings sind hier meine Empfehlungen:

spielen mit Hyper-Parameter Ihres NN, wie zum Beispiel: Aktivierungsfunktionen, Opt-Funktion, Anzahl der Schichten, Lernrate und so weiter.

UPDATE:

Es ist sehr ratsam, Ihre Daten zuerst zu normalisieren.

+0

Hallo @Paddy, danke für die Antwort, ich lief sogar 50 Epochen auf Ihrem Code und bekam nur 0,1% Genauigkeit. Können Sie die Daten normalisieren und ein Beispiel für einen Datensatz wie meinen geben? – Mosu

+0

Hallo @Paddy, danke für die Normalisierung. Ich normalisierte alle Daten zwischen 0-1, indem ich Eingabe-/Ausgabedaten durch Max von Eingabedaten dividierte. Und die endgültigen Vorhersagen scheinen nah und doch nicht perfekt zu sein. Lassen Sie mich wissen, wenn Sie andere Gedanken haben, die dazu beitragen können, die Vorhersagen zu verbessern. – Mosu

+0

gibt es viele Dinge, die Sie versuchen können, mit Batch-Normalisierung und Dropout. Ich würde auch GRU anstelle von LSTM versuchen (einfach LSTM durch GRU ersetzen). Es wäre auch schön, eine Lernrate Callback diesen Link zu überprüfen: https://machineelearningmastery.com/using-learning-rate-schedules-deep-learning-model-python-keras/ – Paddy

0

Genauigkeit ist nicht das richtige Maß für die Leistung Ihres Modells. Was Sie hier zu tun versuchen, ist mehr eine Regression Aufgabe als eine Klassifizierung Aufgabe. Das gleiche kann von Ihrer Verlustfunktion gesehen werden, Sie verwenden 'mean_squared_error' anstatt etwas wie 'categorical_crossentropy'.

Darüber hinaus ist 50 Epochen zu wenig Trainingszeit. Wenn Sie sich die Logs ansehen (in Ihrer ursprünglichen Frage), sehen Sie den Verlust mit jeder Epoche. Sie müssen mit mehreren Epochen trainieren, bis Sie sehen, dass sich der Verlust stabilisiert hat und nicht weiter abnimmt.

Drittens müssen Sie Ihre Daten definitiv normalisieren, bevor Sie sie an die Fit-Funktion übergeben. Die Werte sind sehr groß und der Algorithmus konvergiert möglicherweise nicht ohne Normalisierung.

Wenn Sie immer noch dieses Problem gelöst haben, und weitere Hilfe benötigen, lassen Sie mich in den Kommentaren wissen, damit ich mit dem Code helfen kann.