web-dev-qa-db-ja.com

時系列予測用のLSTMオートエンコーダ

時系列データを予測するためのLSTMオートエンコーダーを構築しようとしています。 Pythonに慣れていないので、デコード部分に間違いがあります。 ここKeras のように構築しようとしました。与えられた例の違いをまったく理解していません。私が今持っているコードは次のようになります。

質問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)
5
annstudent93

私が使用している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=180およびinput_dim=40のデータで機能します。

6
Juan