LSTM+Attention in Keras Ошибка при инициализации состояний нулями

Я пытаюсь реализовать этот документ конкретно, кодировщик с разделом внимания ввода. По сути, это манипулирование входной последовательностью с вниманием, прежде чем передавать ее каждому LSTMшаг времени. Это требует, чтобы каждый расчет временного шага lstm выполнялся вручную, чтобы вместо этого использовать предыдущее скрытое состояние и состояние ячейки.

Чтобы дать контекст, это обычный уровень кодировщика lstm:

       input = layers.Input(shape=(time_window, features), dtype='float32')
lstm, state_h, state_c = layers.LSTM(units=45, activation='tanh', 
                                     return_state=True return_sequences=True)(input)

Это ручная реализация с вниманием к необработанным входным данным:

       input = layers.Input(shape=(time_window, features), dtype='float32')
# Initialise the first hidden state and cell state to zeros 
hidden_state = tf.zeros_like(tf.keras.backend.placeholder(shape=(None, 45)))
cell_state = tf.zeros_like(tf.keras.backend.placeholder(shape=(None, 45)))

lstm = layers.LSTM(units=45, activation='tanh', return_state=True)

# loop over the time windows
for i in range(time_window):
    # get all the input features (and samples) of the current time step
    input_t = input[:, i, :]
    input_t = tf.expand_dims(input_t, 1)
    query = tf.concat([hidden_state, cell_state], axis=-1)
    # get context vector from bahdanau attention
    attention_result, attention_weights = BahdanauAttention(45)([query, input_t])
    attention_result = tf.expand_dims(attention_result, 1)
    # pass the new inputs with attention to the encoder lstm
    out, state_h, state_c = lstm(attention_result, initial_state=[hidden_state, cell_state])
    # update the hidden state and cell state
    hidden_state, cell_state = state_h, state_c

    h.append(state_h)
    c.append(state_c)
    outputs.append(out)

 ...
 # pass the above outputs to the decoder

Я получаю сообщение об ошибке, которое не знаю, как решить:

       ValueError: Graph disconnected: cannot obtain value for tensor Tensor("Placeholder:0", shape=(None, 45), dtype=float32) at layer "tf_op_layer_ZerosLike". The following previous layers were accessed without issue: []

Другие ответы Stackru предполагают, что проблема может быть из-за конфликтов переменных (в этом случае, вероятно, hidden_state и cell_state переназначаемые переменные).

Я не уверен, как решить эту проблему и что на самом деле означает ошибка.

Обновить

Эта проблема связана с тем, что я инициализирую hidden_state и cell_state. Возможно, я неправильно их инициализировал. Суть в том, что мне нужно получить lstmисходные скрытые состояния (или как-то создать их самостоятельно). Правильное решение этой проблемы устранит ошибку.

Это может быть проще, если keras предложит способ работы в пределах самих временных интервалов.

0 ответов

Другие вопросы по тегам