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
初始化器。密集层和多头注意力层的核初始化器。默认为 "glorot_uniform"
。keras.initializers
初始化器。密集层和多头注意力层的偏置初始化器。默认为 "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
且该层具有交叉注意力。