Я работаю над вариационным автоэнкодером (VAE) для обнаружения аномалий во временных рядах. Пока я работал с этим тут https://blog.keras.io/building-autoencoders-in-keras.html и этот https://wiseodd.github.io/techblog/2016/12/10/variational-autoencoder/.
Тем не менее, у меня возникли проблемы с внедрением VAE. У меня есть 77093 образца, которые имеют 1 измерение. Я использую timeteps = 100, чтобы делать прогнозы. Итак, я переделываю свой x_train следующим образом:
x_train.shape = (77093, 100, 1)
Модель:
inputs = Input(shape=(timesteps, input_dim))
encoded = LSTM(32)(inputs)
mu = Dense(1, activation='linear')(encoded)
log_sigma = Dense(1, activation='linear')(encoded)
z = Lambda(sample_z)([mu, log_sigma])
decoded = RepeatVector(timesteps)(z)
decoded = LSTM(1, return_sequences=True)(decoded)
decoded = LSTM(1)(decoded)
sequence_autoencoder = Model(inputs, decoded)
Я образец из:
def sample_z(args):
mu, log_sigma = args
eps = K.random_normal(shape=(50, 1), mean=0., stddev=1.)
return mu + K.exp(log_sigma / 2) * eps
Модель компилируется. Но я не знаю, правильно ли это.
1.) Я не очень понимаю слой RepeatVector и, если необходимо, повторить мой образец z. Но если я не использую RepeatVector Layer, LSTM-Layer выдает ошибку, потому что ожидает 3 тусклых входа.
2.) Меня не беспокоит уменьшение размерности скрытой переменной. Потому что мой In_dim = 1. Что именно уменьшается?
Заранее спасибо.