Как получить выученную репрезентацию в керасе LSTM Autoencoder - PullRequest
0 голосов
/ 14 марта 2019

У меня есть многослойный автоэнкодер LSTM, чей вход представляет собой 20-шаговый временной ряд с 4 атрибутами.

    model = Sequential()
    model.add(CuDNNLSTM(128, input_shape=(20, 4), return_sequences=True))  # encode 1
    model.add(CuDNNLSTM(256, return_sequences=True))  # encode 2
    model.add(CuDNNLSTM(512, return_sequences=True))  # encode 3 -- our final vector
    model.add(CuDNNLSTM(256, return_sequences=True))  # decode 1
    model.add(CuDNNLSTM(128, return_sequences=True))  # decode 2
    model.add(TimeDistributed(Dense(4)))
    model.compile(optimizer='adam', loss='mse')

Когда я устанавливаю выходной слой для кодирования слоя # 3, форма вывода равна (1,20,512).

Как получить вектор формы (1,512) из ​​этого слоя для использования в качестве усвоенного представления входного временного ряда?

Прав ли я, говоря, чтоshape (1,20,512), потому что слой производит один выходной вектор для каждого временного шага, и в этом случае я должен использовать последний выходной вектор?

1 Ответ

1 голос
/ 14 марта 2019

Поскольку вы установили return_sequences=True, слой LSTM будет выводить вектор для каждого временного шага последовательности.

Если вас интересует только последний элемент последовательности, вы можете просто использовать последний 512 вектор. Однако, если вам не нужна обработка следующих слоев, вы также можете просто установить return_sequences=False для вашего интересующего слоя, и он будет напрямую выводить желаемую форму (1,512)

...