Autoencoder LSTM

Estou tentando criar um autoencoder LSTM com o objetivo de obter um vetor de tamanho fixo de uma sequência, que representa a sequência da melhor forma possível. Esse codificador automático consiste em duas partes:

LSTM Codificador: obtém uma sequência e retorna um vetor de saída (return_sequences = False)LSTM Decodificador: pega um vetor de saída e retorna uma sequência (return_sequences = True)

Então, no final, o codificador é ummuitos para um LSTM e o decodificador é umum para muitos LSTM.

Fonte da imagem:Andrej Karpathy

Em um nível alto, a codificação fica assim (semelhante à descritaaqui):

encoder = Model(...)
decoder = Model(...)

autoencoder = Model(encoder.inputs, decoder(encoder(encoder.inputs)))

autoencoder.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

autoencoder.fit(data, data,
          batch_size=100,
          epochs=1500)

A forma (número de exemplos de treinamento, comprimento da sequência, dimensão de entrada) dadata matriz é(1200, 10, 5) e fica assim:

array([[[1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0],
        [0, 0, 1, 0, 0],
        ..., 
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]],
        ... ]

Problema: Não sei ao certo como proceder, principalmente como integrarLSTM paraModel e como obter o decodificador para gerar uma sequência a partir de um vetor.

estou usandokeras comtensorflow back-end.

EDITAR: Se alguém quiser experimentar, aqui está o meu procedimento para gerar sequências aleatórias com as em movimento (incluindo preenchimento):

import random
import math

def getNotSoRandomList(x):
    rlen = 8
    rlist = [0 for x in range(rlen)]
    if x <= 7:
        rlist[x] = 1
    return rlist


sequence = [[getNotSoRandomList(x) for x in range(round(random.uniform(0, 10)))] for y in range(5000)]

### Padding afterwards

from keras.preprocessing import sequence as seq

data = seq.pad_sequences(
    sequences = sequence,
    padding='post',
    maxlen=None,
    truncating='post',
    value=0.
)

questionAnswers(2)

yourAnswerToTheQuestion