【问题标题】:LSTM Autoencoder for time series prediction用于时间序列预测的 LSTM 自动编码器
【发布时间】:2018-10-01 10:04:39
【问题描述】:

我正在尝试构建一个 LSTM 自动编码器来预测时间序列数据。由于我是 Python 新手,我在解码部分有错误。我试着像hereKeras 那样构建它。我根本无法理解给定示例之间的区别。我现在的代码如下所示:

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

问题 2:如何让这个 LSTM 自动编码器工作(模型和预测)?这只是模型,但如何预测?它是从假设从样本 10 开始到数据结束的预测?

Mydata 总共有 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 我也提到了那个问题,但我不明白我有一个 RepeatVector 的区别,他的做法不同,但仍然无法正确编程两个版本
  • 我将更改 rmsprop 的损失和 mse 的优化器,因为它是自动编码器

标签: python keras lstm


【解决方案1】:

我使用的 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

【讨论】:

  • 上面我也改变了你的建议,我也会试试你的模型。谢谢您的帮助。如果我有任何新问题或成功分享,我会再次回到这里。
  • 模型正在工作,我会微调参数谢谢。但是既然我根本不熟悉这个话题,为什么你将 encoder_layer 定义为 2 而没有为 decoder_layer 定义一些东西?
  • 我忘了删除那个变量,它没有被使用。
  • 好的,我提到了它,是否有必要在函数中定义解码器模型,返回?我的意思是它应该也在那里吧?
  • 我正在尝试为时间序列预测构建一个自动编码器解码器模型。我被困在模型的数据准备部分。 @Juan 如果您可以为此提供一些资源指导我,那将非常有帮助
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 2021-01-07
  • 2020-10-03
  • 2019-04-29
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多