Я пытаюсь восстановить данные временных рядов с помощью LSTM Autoencoder (Keras). Теперь я хочу обучить автоэнкодеру на небольшом количестве образцов (5 образцов, каждый образец имеет 500 шагов по времени и имеет 1 измерение). Я хочу убедиться, что модель может восстановить эти 5 образцов, и после этого я буду использовать все данные (6000 образцов).
window_size = 500
features = 1
data = data.reshape(5, window_size, features)
model = Sequential()
model.add(LSTM(256, input_shape=(window_size, features),
return_sequences=True))
model.add(LSTM(128, input_shape=(window_size, features),
return_sequences=False))
model.add(RepeatVector(window_size))
model.add(LSTM(128, input_shape=(window_size, features),
return_sequences=True))
model.add(LSTM(256, input_shape=(window_size, features),
return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(optimizer='adam', loss='mse')
model.fit(data, data, epochs=100, verbose=1)
Обучение:
Epoch 1/100
5/5 [==============================] - 2s 384ms/step - loss: 0.1603
...
Epoch 100/100
5/5 [==============================] - 2s 388ms/step - loss: 0.0018
После тренировки я попытался восстановить один из 5 образцов:
yhat = model.predict(np.expand_dims(data[1,:,:], axis=0), verbose=0)
Восстановление: синий
Вход: оранжевый
Почему реконструкция так плоха, когда потери невелики? Как я могу сделать модель лучше? Благодарю.