Класс Attention
Класс Attention реализует механизм внимания (attention) в TensorFlow.
Слой вычисляет взвешенную сумму значений на основе запросов и ключей.
Первым параметром передается размерность выходного пространства
units. Параметр use_scale определяет,
нужно ли создавать обучаемый масштабирующий коэффициент для запроса.
Параметр score_mode задает способ вычисления оценки внимания.
Параметр dropout задает долю отключаемых весов.
Параметр seed фиксирует генератор случайных чисел.
Синтаксис
tf.keras.layers.Attention(
use_scale=False,
score_mode="dot",
dropout=0.0,
seed=None,
**kwargs
)
Пример
Давайте создадим слой внимания и применим его к запросу и значению:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Attention()
query = tf.constant([[[1.0, 0.0], [0.0, 1.0]]])
value = tf.constant([[[1.0, 2.0], [3.0, 4.0]]])
res = layer([query, value])
print(res)
Результат выполнения кода:
tf.Tensor(
[[[2. 3.]
[2. 3.]]], shape=(1, 2, 2), dtype=float32)
Пример
Давайте создадим слой внимания с параметром
use_scale=True и передадим ключи:
import tensorflow as tf
tf.random.set_seed(0)
layer = tf.keras.layers.Attention(use_scale=True)
query = tf.constant([[[1.0, 0.0], [0.0, 1.0]]])
value = tf.constant([[[1.0, 2.0], [3.0, 4.0]]])
key = tf.constant([[[1.0, 0.0], [0.0, 1.0]]])
res = layer([query, value, key])
print(res)
Результат выполнения кода:
tf.Tensor(
[[[2. 3.]
[2. 3.]]], shape=(1, 2, 2), dtype=float32)
Пример
Давайте используем слой внимания внутри модели
tf.keras.Sequential с несколькими входами:
import tensorflow as tf
tf.random.set_seed(0)
query = tf.keras.Input(shape=(2, 2))
value = tf.keras.Input(shape=(2, 2))
output = tf.keras.layers.Attention()([query, value])
model = tf.keras.Model(inputs=[query, value], outputs=output)
q = tf.constant([[[1.0, 0.0], [0.0, 1.0]]])
v = tf.constant([[[1.0, 2.0], [3.0, 4.0]]])
res = model([q, v])
print(res)
Результат выполнения кода:
tf.Tensor(
[[[2. 3.]
[2. 3.]]], shape=(1, 2, 2), dtype=float32)
Смотрите также
-
класс
MultiHeadAttention,
который реализует многоголовое внимание -
класс
AdditiveAttention,
который реализует аддитивный механизм внимания -
класс
Dense,
который реализует полносвязный слой -
класс
Embedding,
который преобразует индексы в плотные векторы