Betrachten Sie dieses minimal runnable Beispiel:
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import numpy as np
import matplotlib.pyplot as plt
max = 30
step = 0.5
n_steps = int(30/0.5)
x = np.arange(0,max,step)
x = np.cos(x)*(max-x)/max
y = np.roll(x,-1)
y[-1] = x[-1]
shape = (n_steps,1,1)
batch_shape = (1,1,1)
x = x.reshape(shape)
y = y.reshape(shape)
model = Sequential()
model.add(LSTM(50, return_sequences=True, stateful=True, batch_input_shape=batch_shape))
model.add(LSTM(50, return_sequences=True, stateful=True))
model.add(Dense(1))
model.compile(loss='mse', optimizer='rmsprop')
for i in range(1000):
model.reset_states()
model.fit(x,y,nb_epoch=1, batch_size=1)
p = model.predict(x, batch_size=1)
plt.clf()
plt.axis([-1,31, -1.1, 1.1])
plt.plot(x[:, 0, 0], '*')
plt.plot(y[:,0,0],'o')
plt.plot(p[:,0,0],'.')
plt.draw()
plt.pause(0.001)
Wie in der keras API angegeben https://keras.io/layers/recurrent/Zug Keras Stateful LSTM return_seq = Lernen gilt nicht
den letzten Zustand für jeden an dem Index Probe i in einer Charge wird als Anfangszustand für die Probe von Index i in der folgenden Charge verwendet
Also verwende ich batch_size = 1
und ich versuche, den nächsten Wert in der abfallenden Cos-Funktion für jeden Zeitschritt vorherzusagen. Die Vorhersage oder die roten Punkte im Bild unten sollten in die grünen Kreise gehen, damit das Skript es richtig vorhersagt, aber es konvergiert nicht ... Haben Sie eine Idee, um es zu lernen?
Versuchen Sie auch vor der Vorhersage "reset_states". –
Immer noch nicht konvergierend :( – user1506145
Also versuchen Sie 'mae' von' mse' –