В настоящее время я реализую модель субтитров нейронного изображения, показанную здесь:
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. Тем не менее, я был бы очень признателен, если бы кто-нибудь мог объяснить мне, как ГРУ знает, что такое скрытое состояние предыдущего временного шага.
Большое спасибо!