Автоматический кодер Keras LSTM: простой последовательный ввод в последовательный выход - PullRequest
0 голосов
/ 28 мая 2019

У меня есть следующий образец набора данных формы 3D

    X_train =  [[array([[0.32225183]]),
      array([[0.28631562]]),
      array([[0.30552849]]),
      array([[0.33142298]]),
      array([[0.28376102]])],
     [array([[0.28631562]]),
      array([[0.30552849]]),
      array([[0.33142298]]),
      array([[0.28376102]]),
      array([[0.20635083]])],
     [array([[0.30552849]]),
      array([[0.33142298]]),
      array([[0.28376102]]),
      array([[0.20635083]]),
      array([[0.26855856]])]]

Приведенные выше данные имеют форму 5 временных меток / последовательность, 1 особенность и 3 образца.

Я пытаюсь запустить простой автокодер LSTM для обнаружения аномалий временных рядов, поэтому ввод - это последовательность, а вывод - последовательность, ошибка восстановления может сообщить мне об аномалии в конкретное время.

    import numpy as np 
    import pandas as pd 
    import matplotlib.pyplot as plt


    from numpy import array
    from keras.models import Sequential
    from keras.layers import LSTM, Dense, RepeatVector, TimeDistributed
    from keras.utils import plot_model
    from keras import optimizers
    from keras.callbacks import EarlyStopping


    lstm_autoencoder = Sequential()
##EncodingPart
    lstm_autoencoder.add(LSTM(units = 10, activation='relu', input_shape=(5, 1), return_sequences=True))

##DecodingPart

    lstm_autoencoder.add(LSTM(5, activation='relu', return_sequences=True))
    lstm_autoencoder.summary()

## Compile
    lstm_autoencoder.compile(loss='mse', optimizer='adam')
    early_stop = EarlyStopping(monitor='loss', patience=2, verbose=1) 
    lstm_autoencoder_history = lstm_autoencoder.fit(X_train, X_train, 
                                                epochs = 100, 
                                                batch_size = 10, 
                                                verbose=2, callbacks=[early_stop])

Обычно я выравниваю вывод после фитпредсказка и сравниваю ошибку восстановления.

Но это дает мне следующую ошибку

ValueError: Error when checking target: expected lstm_8 to have shape (5, 5) but got array with shape (5, 1)

Пожалуйста, помогите мне получить этот простой последовательный вывод

...