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