TLDR: Wie verwende ich eine Keras RNN, um den nächsten Wert in einer Sequenz vorherzusagen?Vorhersagen mit einem Keras Rekurrenten Neuronalen Netzwerk - Genauigkeit ist immer 1.0
Ich habe eine Liste von sequentiellen Werten. Ich möchte sie in einen RNN zu voraussagen den nächsten Wert in der Sequenz.
Ich benutze Keras, um dies zu tun und kann ein Netzwerk mit einem abnehmenden Verlust bekommen, aber die Genauigkeit ist konsequent 1,0. Das ist falsch. y_tests != model.predict(x_tests)
.
Epoch 0
1517/1517 [==============================] - 0s - loss: 0.0726 - acc: 1.0000 - val_loss: 0.0636 - val_acc: 1.0000
Epoch 1
1517/1517 [==============================] - 0s - loss: 0.0720 - acc: 1.0000 - val_loss: 0.0629 - val_acc: 1.0000
...
Hier ist mein Netzwerk.
model = Sequential()
model.add(SimpleRNN(1, 100))
model.add(Dense(100, 1, activation = "sigmoid"))
model.compile(loss="mean_squared_error", optimizer = "sgd")
Ich habe eine SimpleRNN, GRU und LSTM versucht, aber haben kein Glück gehabt. Hier ist, wie die Daten formatiert sind.
# Current value
y_train = [[ 0.60576923] [ 0.64102564] [ 0.66025641] ..., [ 0.71153846] [ 0.70833333] [ 0.69230769]]
# Previous 10 values
x_train_10 = [
[[ 0.65064103] [ 0.66346154] [ 0.66346154] ..., [ 0.72115385] [ 0.72435897] [ 0.71153846]] ...,
[[ 0.66346154] [ 0.66346154] [ 0.67628205] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]]
]
# Previous value
x_train_1 = [[ 0.58333333] [ 0.60576923] [ 0.64102564] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]]
# So here are the shapes...
y_train.shape = (1895, 1)
x_train_10.shape = (1895, 10, 1)
x_train_1.shape = (1895, 1)
Jedes Element in x_train_10
ist eine Liste der letzten 10 Werten. Ich formatierte es so, um Keras 'Dokumentation zu folgen, dass wiederkehrende Schichten Eingaben von Form (nb_samples, timesteps, input_dim)
annehmen.
Ich habe auch versucht, eine Schicht ohne Glück zu verwenden. (Dies kann der falsche Weg sein, es zu benutzen - ich habe es nur in der Klassifizierung nicht Vorhersage gesehen).
model = Sequential()
model.add(Embedding(1, 30))
model.add(LSTM(30, 100))
...
pad_sequences
hat auch nicht funktioniert.
x_train_1 = sequence.pad_sequences(x_train_1, maxlen = None, dtype = "float32")
Ich möchte die RNN bekommen mit dieser einfachen Daten/Architektur arbeiten, damit ich es für komplexere Probleme später verwenden können.
Thanks :)