附加注意層,又名Bahdanau-style 注意。
用法
tf.keras.layers.AdditiveAttention(
use_scale=True, **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] 。計算步驟如下:
- 分別將
query和key重塑為形狀[batch_size, Tq, 1, dim]和[batch_size, 1, Tv, dim]。 - 計算形狀為
[batch_size, Tq, Tv]的分數作為非線性總和:scores = tf.reduce_sum(tf.tanh(query + key), axis=-1) - 使用分數來計算形狀為
[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:布爾掩碼
training:Python 布爾值,指示層應該在訓練模式(添加 dropout)還是在推理模式(無 dropout)下運行。return_attention_scores:布爾,它True,返回注意力分數(在屏蔽和 softmax 之後)作為附加輸出參數。
輸出:
形狀 [batch_size, Tq, dim] 的注意輸出。 [可選] 使用形狀 [batch_size, Tq, Tv] 進行遮罩和 softmax 後的注意力得分。
query , value 和key 的含義取決於應用程序。例如,在文本相似度的情況下,query 是第一段文本的序列嵌入,value 是第二段文本的序列嵌入。 key 通常與 value 是相同的張量。
下麵是在 CNN+Attention 網絡中使用 AdditiveAttention 的代碼示例:
# 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(max_tokens, dimension)
# 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.AdditiveAttention()(
[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.Add用法及代碼示例
- Python tf.keras.layers.Activation用法及代碼示例
- Python tf.keras.layers.AveragePooling3D用法及代碼示例
- Python tf.keras.layers.Attention用法及代碼示例
- Python tf.keras.layers.AveragePooling2D用法及代碼示例
- Python tf.keras.layers.Average用法及代碼示例
- Python tf.keras.layers.AbstractRNNCell用法及代碼示例
- Python tf.keras.layers.AveragePooling1D用法及代碼示例
- 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.AdditiveAttention。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
