Класс Bidirectional
Класс Bidirectional применяется к рекуррентным слоям для создания двунаправленной сети. Первым параметром передается экземпляр рекуррентного слоя, например LSTM, GRU или SimpleRNN. Вторым параметром можно указать режим объединения результатов merge_mode, который определяет, как складываются выходы прямого и обратного проходов. Третьим параметром передается имя слоя name. По умолчанию используется режим 'concat', который объединяет выходы по последней оси.
Синтаксис
tf.keras.layers.Bidirectional(layer, [merge_mode], [name])
Пример
Давайте создадим двунаправленный слой на основе SimpleRNN и применим его к входной последовательности:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(5, 3)),
tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(4))
])
t = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]], dtype=tf.float32)
res = model(t)
print(res.shape)
Результат выполнения кода:
(1, 8)
Пример
Давайте создадим двунаправленный слой с режимом объединения 'sum':
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(5, 3)),
tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(4), merge_mode='sum')
])
t = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]], dtype=tf.float32)
res = model(t)
print(res.shape)
Результат выполнения кода:
(1, 4)
Пример
Давайте создадим двунаправленный слой с режимом объединения 'ave':
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(5, 3)),
tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(4), merge_mode='ave')
])
t = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]], dtype=tf.float32)
res = model(t)
print(res.shape)
Результат выполнения кода:
(1, 4)
Смотрите также
-
слой
LSTM,
который представляет собой долгую краткосрочную память -
слой
GRU,
который представляет собой управляемый рекуррентный блок -
слой
SimpleRNN,
который представляет собой простую рекуррентную сеть -
слой
TimeDistributed,
который применяет слой к каждому временному шагу