Dot-product 注意层,又名Luong-style 注意。
用法
tf.keras.layers.Attention(
use_scale=False, **kwargs
)
参数
-
use_scale
如果True
,将创建一个标量变量来缩放注意力分数。 -
causal
布尔值。对于解码器self-attention,设置为True
。添加一个掩码,使位置i
不能关注位置j > i
。这可以防止信息从未来流向过去。默认为False
。 -
dropout
在 0 和 1 之间浮点数。注意分数下降的单位分数。默认为 0.0。
输入是 query
形状的张量 [batch_size, Tq, dim]
, value
形状的 [batch_size, Tv, dim]
和 key
形状的张量 [batch_size, Tv, dim]
。计算步骤如下:
- 将形状
[batch_size, Tq, Tv]
的分数计算为query
-key
点积:scores = tf.matmul(query, key, transpose_b=True)
。 - 使用分数来计算形状为
[batch_size, Tq, Tv]
:distribution = tf.nn.softmax(scores)
的分布。 - 使用
distribution
创建value
与形状[batch_size, Tq, dim]
的线性组合:return tf.matmul(distribution, value)
。
调用参数:
inputs
:以下张量列表:- 查询:查询形状为
[batch_size, Tq, dim]
的Tensor
。 - 值:形状
[batch_size, Tv, dim]
的值Tensor
。 - 键:形状为
[batch_size, Tv, dim]
的可选键Tensor
。如果没有给出,将对key
和value
使用value
,这是最常见的情况。
- 查询:查询形状为
mask
:以下张量列表:- query_mask:布尔掩码
Tensor
形状为[batch_size, Tq]
。如果给定,输出将在mask==False
的位置为零。 - value_mask:布尔掩码
Tensor
形状为[batch_size, Tv]
。如果给定,将应用掩码以使mask==False
位置处的值对结果没有贡献。
- query_mask:布尔掩码
return_attention_scores
:布尔,它True
,返回注意力分数(在屏蔽和 softmax 之后)作为附加输出参数。training
:Python 布尔值,指示层应该在训练模式(添加 dropout)还是在推理模式(无 dropout)下运行。
输出:
形状 [batch_size, Tq, dim]
的注意输出。 [可选] 使用形状 [batch_size, Tq, Tv]
进行遮罩和 softmax 后的注意力得分。
query
, value
和key
的含义取决于应用程序。例如,在文本相似度的情况下,query
是第一段文本的序列嵌入,value
是第二段文本的序列嵌入。 key
通常与 value
是相同的张量。
下面是在 CNN+Attention 网络中使用 Attention
的代码示例:
# Variable-length int sequences.
query_input = tf.keras.Input(shape=(None,), dtype='int32')
value_input = tf.keras.Input(shape=(None,), dtype='int32')
# Embedding lookup.
token_embedding = tf.keras.layers.Embedding(input_dim=1000, output_dim=64)
# Query embeddings of shape [batch_size, Tq, dimension].
query_embeddings = token_embedding(query_input)
# Value embeddings of shape [batch_size, Tv, dimension].
value_embeddings = token_embedding(value_input)
# CNN layer.
cnn_layer = tf.keras.layers.Conv1D(
filters=100,
kernel_size=4,
# Use 'same' padding so outputs have the same shape as inputs.
padding='same')
# Query encoding of shape [batch_size, Tq, filters].
query_seq_encoding = cnn_layer(query_embeddings)
# Value encoding of shape [batch_size, Tv, filters].
value_seq_encoding = cnn_layer(value_embeddings)
# Query-value attention of shape [batch_size, Tq, filters].
query_value_attention_seq = tf.keras.layers.Attention()(
[query_seq_encoding, value_seq_encoding])
# Reduce over the sequence axis to produce encodings of shape
# [batch_size, filters].
query_encoding = tf.keras.layers.GlobalAveragePooling1D()(
query_seq_encoding)
query_value_attention = tf.keras.layers.GlobalAveragePooling1D()(
query_value_attention_seq)
# Concatenate query and document encodings to produce a DNN input layer.
input_layer = tf.keras.layers.Concatenate()(
[query_encoding, query_value_attention])
# Add DNN layers, and create Model.
# ...
相关用法
- Python tf.keras.layers.Activation用法及代码示例
- Python tf.keras.layers.AveragePooling3D用法及代码示例
- Python tf.keras.layers.AveragePooling2D用法及代码示例
- Python tf.keras.layers.Add用法及代码示例
- Python tf.keras.layers.Average用法及代码示例
- Python tf.keras.layers.AbstractRNNCell用法及代码示例
- Python tf.keras.layers.AveragePooling1D用法及代码示例
- Python tf.keras.layers.AdditiveAttention用法及代码示例
- Python tf.keras.layers.InputLayer用法及代码示例
- Python tf.keras.layers.serialize用法及代码示例
- Python tf.keras.layers.Dropout用法及代码示例
- Python tf.keras.layers.maximum用法及代码示例
- Python tf.keras.layers.LayerNormalization用法及代码示例
- Python tf.keras.layers.Conv2D用法及代码示例
- Python tf.keras.layers.RepeatVector用法及代码示例
- Python tf.keras.layers.Multiply用法及代码示例
- Python tf.keras.layers.Conv1D用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt用法及代码示例
- Python tf.keras.layers.CategoryEncoding用法及代码示例
- Python tf.keras.layers.subtract用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.Attention。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。