Скрытое состояние в TensorFlow
По умолчанию рекуррентный слой отдаёт одну сводку на всю цепочку - после последнего шага. В задачах разметки по словам или по кадрам нужен ответ на каждом шаге: скрытое состояние после обработки соответствующего фрагмента.
Параметр return_sequences
при создании слоя включает такой
режим. Тогда вместо одной строки
на цепочку возвращают тензор
с тем же числом шагов, что на входе.
Сравним форму для одной цепочки
из четырёх шагов без параметра
и с включённым параметром
return_sequences:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
steps = tf.constant([[[1.0], [2.0], [3.0], [4.0]]])
whole = tf.keras.layers.LSTM(5)(steps)
each = tf.keras.layers.LSTM(5, return_sequences=True)(steps)
print(whole.shape)
print(each.shape)
# выведет (1, 5)
# выведет (1, 4, 5)
Размер сводки на шаг совпадает с размером итога в обычном режиме. Меняется только наличие оси шагов между партией и признаками:
import tensorflow as tf
steps = tf.constant([[[0.0], [1.0]], [[2.0], [3.0]]])
layer = tf.keras.layers.LSTM(3, return_sequences=True)
out = layer(steps)
print(out.shape)
Задайте одну цепочку из пяти
шагов с одним признаком.
Получите сводку на каждом шаге
размера 4 и выведите
форму тензора.
Соберите партию из двух цепочек
длины три. Настройте рекуррентный
блок так, чтобы на выходе была
строка состояния после каждого
шага, и выведите форму ответа
при размере сводки 6.
Создайте вход формы (1, 7, 2).
Узнайте форму результата после
рекуррентного блока с выходом
10 на каждом шаге.