LSTM自编码器用于时间序列预测

6

我正在尝试构建一个LSTM自编码器来预测时间序列数据。由于我是Python的新手,在解码部分有一些错误。我试图像这里Keras中所示的那样建立它。但我完全不理解给出的例子之间的区别。我现在拥有的代码如下:

问题1:每个样本都有2000个值时,如何选择batch_size和input_dimension?

问题2:如何使这个LSTM自编码器工作(模型和预测)?这只是模型,但如何进行预测?例如从第10个样本开始一直预测到数据结尾?

我的数据总共有1500个样本,我会使用10个时间步长(如果更好,则可以使用更多),每个样本有2000个值。如果您需要更多信息,我稍后也可以提供。

trainX = np.reshape(data, (1500, 10,2000))

from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, RepeatVector

参数
timesteps=10
input_dim=2000
units=100 #choosen unit number randomly
batch_size=2000 
epochs=20

模型

inpE = Input((timesteps,input_dim)) 
outE = LSTM(units = units, return_sequences=False)(inpE)
encoder = Model(inpE,outE) 
inpD = RepeatVector(timesteps)(outE)
outD1 = LSTM(input_dim, return_sequences=True)(outD
decoder = Model(inpD,outD) 
autoencoder = Model(inpE, outD)
autoencoder.compile(loss='mean_squared_error',
          optimizer='rmsprop',
          metrics=['accuracy'])
autoencoder.fit(trainX, trainX,
      batch_size=batch_size,
      epochs=epochs)
encoderPredictions = encoder.predict(trainX)

你需要通过试错来确定“batch_size”的值,但是它应该小于1500。 - Juan
@Juan,感谢您的建议。关于模型的实现,您能帮我吗? - annstudent93
@Juan 我也参考了那个问题,但我不明白我有一个RepeatVector,而他做得不同,但仍然无法正确编程两个版本。 - annstudent93
另外,您需要将第一个 return_sequences=True 修改为 return_sequences=False - Juan
显示剩余2条评论
1个回答

7
我使用的LSTM模型如下:

该模型为:

def get_model(n_dimensions):
    inputs = Input(shape=(timesteps, input_dim))
    encoded = LSTM(n_dimensions, return_sequences=False, name="encoder")(inputs)
    decoded = RepeatVector(timesteps)(encoded)
    decoded = LSTM(input_dim, return_sequences=True, name='decoder')(decoded)

    autoencoder = Model(inputs, decoded)
    encoder = Model(inputs, encoded)
    return autoencoder, encoder

autoencoder, encoder = get_model(n_dimensions)
autoencoder.compile(optimizer='rmsprop', loss='mse', 
                    metrics=['acc', 'cosine_proximity'])

history = autoencoder.fit(x, x, batch_size=100, epochs=100)
encoded = encoder.predict(x)

它使用的数据是 x,其大小为 (3000, 180, 40),即 3000 个样本,timesteps=180input_dim=40

我忘记删除那个变量,它没有被使用。 - Juan
好的,我提到了它,那么在函数中定义解码器模型并返回是否必要?我的意思是它也应该在那里,对吧? - annstudent93
你能展示一下数据是如何为模型准备的吗? - Sreeram TP
1
我正在尝试构建用于时间序列预测的自动编码器解码器模型。我陷在了模型数据准备的部分。 @Juan 如果您能为我提供一些相关资源的指导,将非常有帮助。 - Sreeram TP
请查看以下链接中的代码内容:https://github.com/primatelang/mcr/blob/d50c2044001bbedf1cfd8255f948fb3a3b013f6a/mcr/reduce_features.py#L117 - Juan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接