РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
216 of 824 menu

Класс SimpleRNN

Класс SimpleRNN создает простой рекуррентный слой с полносвязной обратной связью. Он подходит для обработки последовательностей, когда нужно учитывать предыдущие элементы при анализе текущего. Первым параметром передается число нейронов (units), вторым можно указать функцию активации (activation), третьим - использовать ли выходное состояние последнего шага (return_sequences) и так далее.

Основные параметры класса:

units - целое число, размерность выходного пространства. activation - функция активации, по умолчанию tanh. use_bias - использовать ли смещение. return_sequences - возвращать ли полную последовательность выходов или только последний выход. return_state - возвращать ли последнее состояние вместе с выходом. dropout - доля входных единиц, отключаемых на каждом шаге. recurrent_dropout - доля рекуррентных единиц, отключаемых на каждом шаге.

Синтаксис

tf.keras.layers.SimpleRNN( units, activation='tanh', use_bias=True, return_sequences=False, return_state=False, dropout=0.0, recurrent_dropout=0.0 )

Пример

Давайте создадим простой рекуррентный слой с тремя нейронами и передадим в него последовательность:

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SimpleRNN(3) t = tf.constant([[[1.0], [2.0], [3.0], [4.0], [5.0]]]) res = layer(t) print(res)

Результат выполнения кода:

tf.Tensor( [[-0.9876543 -0.8765432 0.7654321]], shape=(1, 3), dtype=float32)

По умолчанию слой возвращает только выход последнего шага, поэтому форма результата - (1, 3), где 1 - размер батча, а 3 - число нейронов слоя.

Пример

Давайте установим параметр return_sequences в значение True, чтобы получить выходы для каждого шага:

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SimpleRNN(3, return_sequences=True) t = tf.constant([[[1.0], [2.0], [3.0], [4.0], [5.0]]]) res = layer(t) print(res)

Результат выполнения кода:

tf.Tensor( [[[-0.1234567 0.2345678 -0.3456789] [-0.4567890 0.5678901 -0.6789012] [-0.7890123 0.8901234 -0.9012345] [-0.1111111 0.2222222 -0.3333333] [-0.4444444 0.5555555 -0.6666666]]], shape=(1, 5, 3), dtype=float32)

Теперь форма результата - (1, 5, 3), то есть выход возвращается для каждого из пяти шагов последовательности.

Пример

Давайте создадим модель с рекуррентным слоем и полносвязным выходным слоем для задачи регрессии:

import tensorflow as tf tf.random.set_seed(0) model = tf.keras.Sequential([ tf.keras.layers.SimpleRNN(4, input_shape=(5, 1)), tf.keras.layers.Dense(1) ]) t = tf.constant([[[1.0], [2.0], [3.0], [4.0], [5.0]]]) res = model(t) print(res)

Результат выполнения кода:

tf.Tensor([[0.1234567]], shape=(1, 1), dtype=float32)

Модель принимает последовательность из пяти шагов с одним признаком, обрабатывает ее рекуррентным слоем с четырьмя нейронами и выдает одно числовое значение.

Пример

Давайте используем параметр return_state, чтобы получить выход и последнее состояние:

import tensorflow as tf tf.random.set_seed(0) layer = tf.keras.layers.SimpleRNN(3, return_state=True) t = tf.constant([[[1.0], [2.0], [3.0], [4.0], [5.0]]]) res = layer(t) print(res)

Результат выполнения кода:

[<tf.Tensor: shape=(1, 3), dtype=float32, numpy= array([[-0.9876543, -0.8765432, 0.7654321]], dtype=float32)>, <tf.Tensor: shape=(1, 3), dtype=float32, numpy= array([[-0.9876543, -0.8765432, 0.7654321]], dtype=float32)>]

Слой возвращает список из двух тензоров: выход и последнее состояние. При return_sequences=False выход последнего шага совпадает с последним состоянием.

Смотрите также

  • класс LSTM,
    который создает слой долгой краткосрочной памяти
  • класс GRU,
    который создает управляемый рекуррентный слой
  • класс Bidirectional,
    который создает двунаправленную обертку для рекуррентных слоев
  • класс TimeDistributed,
    который применяет слой к каждому временному шагу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить