
Zde je základní příklad jak vytvořit model pro předpověď časových řad pomocí LSTM (Long Short-Term Memory) sítě v Kerasu. V tomto příkladu budeme používat jednoduchý syntetický dataset pro jednoduchost, ale stejný postup by se použil pro reálné data, například ceny akcií.
Předpokládejme, že máme časovou řadu y = sin(x).
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# Generujeme data
x = np.linspace(0, 40, 400)
y = np.sin(x)
# Zobrazíme data
plt.plot(y)
plt.show()

Nyní připravíme data pro LSTM síť. LSTM očekává data ve formátu [samples, time steps, features].
# Počet časových kroků pro každou vzorku
n_steps = 10
# Počet budoucích časových kroků k předpovědi
n_ahead = 1
X, Y = [], []
for i in range(len(y)-n_steps-n_ahead):
X.append(y[i:i+n_steps])
Y.append(y[i+n_steps:i+n_steps+n_ahead])
X = np.array(X)
Y = np.array(Y)
# Reshape pro LSTM [samples, time steps, features]
X = X.reshape(X.shape[0], X.shape[1], 1)
Y = Y.reshape(Y.shape[0], Y.shape[1])
Nyní vytvoříme a natrénujeme LSTM síť.
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_steps, 1)))
model.add(Dense(n_ahead))
model.compile(optimizer='adam', loss='mse')
history = model.fit(X, Y, epochs=200, verbose=0)
Nyní můžeme vytisknout chybu během tréninku a také vyzkoušet předpovědi modelu.
plt.plot(history.history['loss'])
plt.show()
# Testování modelu
test_seq = y[-n_steps:]
test_seq = test_seq.reshape(1, n_steps, 1)
preds = []
for _ in range(100):
pred = model.predict(test_seq)
preds.append(pred[0][0])
test_seq = np.roll(test_seq, -1)
test_seq[0, -1, 0] = pred
plt.plot(y)
plt.plot(range(len(y)-100, len(y)), preds)
plt.show()
Tento kód vytvoří LSTM model, který se snaží předpovědět následující hodnotu sinusové funkce. Tréninkové data jsou generována z sinusové funkce a model je pak natrénován na těchto datech. Na konci kód vytiskne graf chyby během tréninku a také graf skutečných a předpovězených hodnot.