TransformerDecoder
類別keras_hub.layers.TransformerDecoder(
intermediate_dim,
num_heads,
dropout=0,
activation="relu",
layer_norm_epsilon=1e-05,
kernel_initializer="glorot_uniform",
bias_initializer="zeros",
normalize_first=False,
**kwargs
)
Transformer 解碼器。
此類別遵循論文 Attention is All You Need 中 transformer 解碼器層的架構。使用者可以實例化此類別的多個實例來堆疊解碼器。
預設情況下,此層會將因果遮罩應用於解碼器注意力層。您也可以在呼叫期間直接將填充或注意力遮罩傳遞給此層,例如使用 decoder_padding_mask
或 decoder_attention_mask
。
此層可以使用一個或兩個輸入來呼叫。輸入的數量在所有呼叫中必須一致。選項如下:layer(decoder_sequence)
:不會在解碼器區塊中建立交叉注意力。這在建構「僅解碼器」transformer(例如 GPT-2)時很有用。layer(decoder_sequence, encoder_sequence)
:交叉注意力將在解碼器區塊中建立。這在建構「編碼器-解碼器」transformer(例如 Attention is All You Need 中描述的原始 transformer 模型)時很有用。
參數
0.
。keras.activations
。前饋網路的激活函數。預設值為 "relu"
。1e-5
。keras.initializers
初始化器。用於密集層和多頭注意力層的 kernel 初始化器。預設值為 "glorot_uniform"
。keras.initializers
初始化器。用於密集層和多頭注意力層的 bias 初始化器。預設值為 "zeros"
。False
。keras.layers.Layer
的其他關鍵字參數,包括 name
、trainable
、dtype
等。範例
# Create a single transformer decoder layer.
decoder = keras_hub.layers.TransformerDecoder(
intermediate_dim=64, num_heads=8)
# Create a simple model containing the decoder.
decoder_input = keras.Input(shape=(10, 64))
encoder_input = keras.Input(shape=(10, 64))
output = decoder(decoder_input, encoder_input)
model = keras.Model(
inputs=(decoder_input, encoder_input),
outputs=output,
)
# Call decoder on the inputs.
decoder_input_data = np.random.uniform(size=(2, 10, 64))
encoder_input_data = np.random.uniform(size=(2, 10, 64))
decoder_output = model((decoder_input_data, encoder_input_data))
參考文獻
call
方法TransformerDecoder.call(
decoder_sequence,
encoder_sequence=None,
decoder_padding_mask=None,
decoder_attention_mask=None,
encoder_padding_mask=None,
encoder_attention_mask=None,
self_attention_cache=None,
self_attention_cache_update_index=None,
cross_attention_cache=None,
cross_attention_cache_update_index=None,
use_causal_mask=True,
training=None,
)
TransformerDecoder 的前向傳遞。
參數
None
。一旦模型在沒有 encoder_sequence 的情況下被呼叫一次,您就不能再次使用 encoder_sequence 呼叫它。[batch_size, decoder_sequence_length]
。[batch_size, decoder_sequence_length, decoder_sequence_length]
[batch_size, encoder_sequence_length]
。[batch_size, encoder_sequence_length, encoder_sequence_length]
[batch_size, 2, max_seq_len, num_heads, key_dims]
。self_attention_cache
的索引。通常,這是解碼期間正在處理的當前 token 的索引。[batch_size, 2, S, num_heads, key_dims]
。cross_attention_cache
的索引。通常,這可以是 0
(計算整個 cross_attention_cache
),或 None
(重複使用先前計算的 cross_attention_cache
)。True
。如果為 true,則因果遮罩(遮蔽未來輸入)將應用於解碼器序列。返回
outputs
,如果 self_attention_cache
為 None
。(outputs, self_attention_cache)
,如果設定了 self_attention_cache
且該層沒有交叉注意力。(outputs, self_attention_cache, cross_attention_cache)
,如果設定了 self_attention_cache
和 cross_attention_cache
且該層具有交叉注意力。