Класс LSTM
Класс LSTM создает слой долгой краткосрочной памяти
(Long Short-Term Memory). Такой слой применяется к
последовательностям данных и способен запоминать
информацию на длительных промежутках времени. Первым
параметром передается число выходных нейронов
units. Параметр activation задает функцию
активации, recurrent_activation - функцию активации
рекуррентных ворот, return_sequences определяет,
возвращать ли всю последовательность или только последний
выход, а return_state - возвращать ли внутренние
состояния слоя.
Синтаксис
tf.keras.layers.LSTM(
units,
activation="tanh",
recurrent_activation="sigmoid",
return_sequences=False,
return_state=False,
**kwargs
)
Пример
Давайте создадим слой LSTM с тремя выходными нейронами и применим его к последовательности:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.LSTM(3)
t = tf.constant([[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[-0.01340377 0.03718087 0.02874492]], shape=(1, 3), dtype=float32)
Пример
Давайте вернем всю последовательность, установив
return_sequences в True:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.LSTM(3, return_sequences=True)
t = tf.constant([[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]])
res = layer(t)
print(res)
Результат выполнения кода:
tf.Tensor(
[[[-0.01697307 0.04587055 0.03548393]
[-0.01772601 0.04706296 0.03610517]
[-0.01340377 0.03718087 0.02874492]]], shape=(1, 3, 3), dtype=float32)
Пример
Давайте также вернем внутренние состояния слоя,
установив return_state в True:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.LSTM(3, return_state=True)
t = tf.constant([[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]])
res = layer(t)
print(res)
Результат выполнения кода:
[<tf.Tensor: shape=(1, 3), dtype=float32, numpy=
array([[-0.01340377, 0.03718087, 0.02874492]], dtype=float32)>,
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=
array([[-0.02972944, 0.08247393, 0.06376111]], dtype=float32)>,
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=
array([[-0.05454623, 0.15008445, 0.11603062]], dtype=float32)>]
Смотрите также
-
класс
GRU,
который создает слой управляемого рекуррентного блока -
класс
SimpleRNN,
который создает простой рекуррентный слой -
класс
Bidirectional,
который создает двунаправленную обертку для рекуррентных слоев -
класс
ConvLSTM2D,
который создает сверточный LSTM слой для двумерных данных