начальное состояние lstm кодер декодер керас - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь создать декодер LSTM-кодера, где моя главная цель состоит в том, чтобы исходное состояние декодера было таким же, как и у кодера.Я нашел код ниже здесь и попытался прикрепить его к моему делу.У меня есть данные с формой (1000,20,1).Я хочу, чтобы декодер дал мне на выходе мой вход обратно.Я не знаю, как исправить код, чтобы он работал, даже я понимаю ошибку.Когда я пытаюсь запустить это, я получаю следующую ошибку:

The model expects 2 input arrays, but only received one array. Found: 
array with shape (10000, 20, 1)




from keras.models import Model
from keras.layers import Input
from keras.layers import LSTM
from keras.layers import Dense
from keras.models import Sequential

latent_dim = 128
encoder_inputs = Input(shape=(20,1))
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(encoder_inputs)
# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]
# Set up the decoder, using `encoder_states` as initial state.
decoder_inputs = Input(shape=(20, 1))
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states)
decoder_dense = Dense(1, activation='tanh')
decoder_outputs = decoder_dense(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
model.compile(optimizer='adam', loss='mse', metrics=['acc', 'mae'])

history=model.fit(xtrain, xtrain, epochs=200, verbose=2, shuffle=False)

У меня также есть эта модель, но я не уверен, как я могу инициализировать здесь состояние кодера, такое же, как состояние декодера.Это повторяет вектор?

#define model

model = Sequential()
model.add(LSTM(100, input_shape=(n_timesteps_in, n_features)))
model.add(RepeatVector(n_timesteps_in))
model.add(LSTM(100, return_sequences=True))
model.add(TimeDistributed(Dense(n_features, activation='tanh')))
model.compile(loss='mse', optimizer='adam', metrics=['mae'])

history=model.fit(train, train, epochs=epochs, verbose=2, shuffle=False)

1 Ответ

0 голосов
/ 20 мая 2018

Вы строите модель с 2 входами, а именно encoder_inputs и decoder_inputs, но только с одним входом .fit(xtrain, xtrain, ...) вторым аргументом является выход.В случае, если вам нужно дать еще один аргумент вида .fit([xtrain, the_inputs_for_decoder], xtrain, ...)

...