Входы в энкодер-декодер LSTMCell / RNN Network - PullRequest
2 голосов
/ 06 апреля 2019

Я создаю сеть LSTM Encoder-Decoder, используя Keras, следуя приведенному здесь коду: https://github.com/LukeTonin/keras-seq-2-seq-signal-prediction. Единственное изменение, которое я сделал, - заменить GRUCell на LSTMCell.По сути, кодер и декодер состоят из 2 уровней из 35 LSTMCells.Слои накладываются друг на друга (и объединяются) с использованием слоя RNN.

LSTMCell возвращает 2 состояния, тогда как GRUCell возвращает 1 состояние.Здесь я сталкиваюсь с ошибкой, так как не знаю, как кодировать 2 возвращенных состояния LSTMCell.

Я создал две модели: во-первых, модель кодер-декодер.Во-вторых, модель прогнозирования.Я не сталкиваюсь с какими-либо проблемами в модели кодер-декодер, но сталкиваюсь с проблемами в декодере модели прогнозирования.

Я получаю ошибку: ValueError: Layer rnn_4 expects 9 inputs, but it received 3 input tensors. Input received: [<tf.Tensor 'input_4:0' shape=(?, ?, 1) dtype=float32>, <tf.Tensor 'input_11:0' shape=(?, 35) dtype=float32>, <tf.Tensor 'input_12:0' shape=(?, 35) dtype=float32>]

Эта ошибка возникает, когда запускается следующая строка в модели прогнозирования:

decoder_outputs_and_states = decoder(
        decoder_inputs, initial_state=decoder_states_inputs)

Разделкод, в который это вписывается:

encoder_predict_model = keras.models.Model(encoder_inputs,
                                           encoder_states)

decoder_states_inputs = []

# Read layers backwards to fit the format of initial_state
# For some reason, the states of the model are order backwards (state of the first layer at the end of the list)
# If instead of a GRU you were using an LSTM Cell, you would have to append two Input tensors since the LSTM has 2 states.
for hidden_neurons in layers[::-1]:
    # One state for GRU, but two states for LSTMCell
    decoder_states_inputs.append(keras.layers.Input(shape=(hidden_neurons,)))
decoder_outputs_and_states = decoder(
        decoder_inputs, initial_state=decoder_states_inputs)

decoder_outputs = decoder_outputs_and_states[0]
decoder_states = decoder_outputs_and_states[1:]

decoder_outputs = decoder_dense(decoder_outputs)

decoder_predict_model = keras.models.Model(
        [decoder_inputs] + decoder_states_inputs,
        [decoder_outputs] + decoder_states)

Может ли кто-нибудь помочь мне с циклом for, указанным выше, и начальными состояниями, после которых я должен передать декодер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...