Разница между 2 LSTM Автоэнкодерами - PullRequest
0 голосов
/ 28 апреля 2018

Я хотел бы знать разницу между этими 2 моделями. В приведенном выше есть 4 слоя, которые просматривают сводку модели, и вы также можете определить номера единиц для уменьшения размерности. Но что со 2-й моделью, она имеет 3 слоя, и вы не можете напрямую определить количество скрытых единиц? Являются ли оба LSTM Autoencoder для уменьшения размерности и регрессионного анализа? Есть ли хорошие статьи, описывающие эти два примера, которые я нашел из keras и здесь . Я нигде не определил переменные, потому что я не задаю вопрос о кодировании напрямую. Я надеюсь, что это также хорошее место для этой темы. 1. Модель:

from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, Dense, RepeatVector

samples=1000
timesteps=300
features=input_dim=1
data_shape=np.reshape(data,(samples,timestep,input_dim)

inputs = Input(shape=(timestep, input_dim))
encoded = LSTM(units, return_sequences=False, name="encoder")(inputs)
decoded = RepeatVector(timestep)(encoded)
decoded = LSTM(input_dim, return_sequences=True, name='decoder')(decoded)
autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
print (autoencoder.summary())

2. Модель:

x = np.random.random((1000, 300, 1))

2.модель:

m = Sequential()
m.add(LSTM(100, input_shape=(300,1)))
m.add(RepeatVector(300))
m.add(LSTM(100, return_sequences=True))
print (m.summary())
m.compile(loss='mse', optimizer='rmsprop', metrics=['mse', 'mape'])
history = m.fit(x, x, nb_epoch=2000, batch_size=100)

Когда я пытаюсь добавить к ним данные формы, например (1000, 300, 1) первый принимает его, второй нет, я получаю ожидаемую ошибку lstm_4, чтобы иметь форму (Нет, 300, 100), но получил массив с формой (1000, 300, 1). С выбранным input_dim 1 и единицами = 100. Что я делаю неправильно ? Вот кем я хочу быть:

LSTM(100, input_shape=(300, 1))

с единицами = 100 Когда я запускаю модель, я получаю следующую ошибку: Ошибка при проверке цели: ожидалось, что lstm_2 будет иметь форму (Нет, 300, 100), но получил массив с формой (1000, 300, 1)

Где моя ошибка в том, что модель не принимает мою форму данных и размер моих единиц?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Две модели не имеют структурных различий; оба они состоят из кодера, за которым следует декодер, реализованный слоями LSTM. Разница нотационная; первая модель определена в функциональном API , причем вход считается слоем, а вторая - в последовательном API . Что касается архитектуры кодер-декодер (также известной как seq2seq), то изначально она была предложена здесь , и с тех пор она значительно эволюционировала, причем самым значительным улучшением стал уровень внимания.

0 голосов
/ 28 апреля 2018

Количество единиц для слоев LSTM во второй модели является первым аргументом инициализатора, равным 2. То есть, если вы позволите timestep = 10, input_dim = 2 и units = 2, то две модели абсолютно эквивалентны.

...