Пользовательские циклы обучения для LSTM (Tensorflow 2) - PullRequest
1 голос
/ 29 мая 2020

В настоящее время я реализую модель субтитров нейронного изображения, показанную здесь:

https://www.tensorflow.org/tutorials/text/image_captioning

Обучение l oop передает пакет предложений слово за словом в декодер. При реализации модели я заметил, что скрытое состояние предыдущего временного шага не передается в ГРУ. Чтобы убедиться, что ГРУ не сохраняет скрытое состояние предыдущего временного шага, я написал свой собственный пример игрушки и обнаружил, что он действительно не сохраняет скрытое состояние:

    input_word = tf.keras.layers.Input(shape=(1,5))
    h = tf.keras.layers.Input(shape=(3,))
    c = tf.keras.layers.Input(shape=(3,))
    out, new_h, new_c = tf.keras.layers.LSTM(3, return_state=True, name='lstm')(input_word) #h and c not passed into LSTM
    out = tf.keras.layers.Dense(4)(out)
    out = tf.keras.layers.Dropout(0.1)(out)
    out = tf.keras.layers.Dense(2)(out)
    model = tf.keras.Model(inputs=[input_word, h, c], outputs=[out, new_h, new_c])

    sequence = tf.convert_to_tensor(np.random.random([1, 3, 5]), dtype=tf.float32)
    c = tf.convert_to_tensor(np.array([[0.1, 0.2, 0.3]]), dtype=tf.float32)
    h = tf.convert_to_tensor(np.array([[0.1, 0.2, 0.3]]), dtype=tf.float32)
    current_input = tf.expand_dims(sequence[:, 0], 1)
    for i in range(1, sequence.shape[1]):
        print(model.get_layer('lstm').states)
        predictions, h, c = model([current_input[: i], h, c])
        print(model.get_layer('lstm').states)
        current_input = tf.expand_dims(sequence[:, i], 1)

Операторы состояния печати возвращают [None, None].

Я уверен, что это непонимание с моей стороны, а не ошибка Google. Тем не менее, я был бы очень признателен, если бы кто-нибудь мог объяснить мне, как ГРУ знает, что такое скрытое состояние предыдущего временного шага.

Большое спасибо!

...