gpt4 book ai didi

python - Keras LSTM 自动编码器时间序列重建

转载 作者:太空狗 更新时间:2023-10-29 17:20:14 25 4
gpt4 key购买 nike

我正在尝试使用 LSTM 自动编码器 (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)

Model

训练:

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)

重构:蓝色
输入:橙色

Reconstion (blue) vs Input (orange)

为什么在损失很小的情况下重建如此糟糕?我怎样才能使模型更好?谢谢。

最佳答案

更新:下面的答案基于旧版本并基于当前的 LSTM 文档,输入的形状应为 [batch, timesteps, feature]!看到这个:https://github.com/keras-team/keras/blob/b80dd12da9c0bc3f569eca3455e77762cf2ee8ef/keras/layers/rnn/lstm.py#L481


旧答案:

在我看来,时间序列应该以这种格式提供给 LSTM:

 (samples, features , window_size)

因此,如果您更改格式,例如我交换了变量,然后查看结果:

[![在此处输入图片描述][1]][1]

重现结果的代码(我没有更改变量的名称,所以请不要混淆:)):

import numpy as np
import keras
from keras import Sequential
from keras.layers import Dense, RepeatVector, TimeDistributed
from keras.layers import LSTM

N = 10000
data = np.random.uniform(-0.1, 0.1, size=(N, 500))
data = data.cumsum(axis=1)
print(data.shape)
window_size = 1
features = 500
data = data.reshape(N, window_size, features)

model = Sequential()

model.add(LSTM(32, input_shape=
(window_size,features),
return_sequences=True))
model.add(LSTM(16, input_shape=(window_size,
features),
return_sequences=False))
model.add(RepeatVector(window_size))

model.add(LSTM(16, input_shape=(window_size,
features),
return_sequences=True))
model.add(LSTM(32, input_shape=(window_size,
features),
return_sequences=True))
model.add(TimeDistributed(Dense(500)))

model.compile(optimizer='adam', loss='mse')
model.fit(data, data, epochs=100, verbose=1)


yhat = model.predict(np.expand_dims(data[1,:,:], axis=0), verbose=0)
plot(np.arange(500), yhat[0,0,:])
plot(np.arange(500), data[1,0,:])

归功于 sobe86:我使用了他/她建议的数据。[1]: /image/5JUDN.png

关于python - Keras LSTM 自动编码器时间序列重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com