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)
:解码器块中不会构建交叉注意力。这在构建 GPT-2 等“仅解码器”Transformer 时很有用。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
的索引。通常,这是解码过程中正在处理的当前标记的索引。[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
已设置并且该层有交叉注意力。