首页 文章

用于时间序列预测的LSTM Autoencoder

提问于
浏览
3

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

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

问题2:如何使LSTM Autoencoder工作(模型和预测)?这不仅仅是模型,而是如何预测?它是从样本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)

1 回答

  • 4

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

相关问题