我正在努力掩盖 MultiHeadAttention 层的输入。我正在使用 Keras 文档中的 Transformer Block 进行自我关注。到目前为止,我在网上找不到任何示例代码,如果有人能给我一个代码片段,我将不胜感激。
本页的变压器块:
class TransformerBlock(layers.Layer):
def __init__(self, embed_dim, num_heads, ff_dim, rate=0.1):
super(TransformerBlock, self).__init__()
self.att = layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim)
self.ffn = keras.Sequential(
[layers.Dense(ff_dim, activation="relu"), layers.Dense(embed_dim),]
)
self.layernorm1 = layers.LayerNormalization(epsilon=1e-6)
self.layernorm2 = layers.LayerNormalization(epsilon=1e-6)
self.dropout1 = layers.Dropout(rate)
self.dropout2 = layers.Dropout(rate)
def call(self, inputs, training):
attn_output = self.att(inputs, inputs)
attn_output = self.dropout1(attn_output, training=training)
out1 = self.layernorm1(inputs + attn_output)
ffn_output = self.ffn(out1)
ffn_output = self.dropout2(ffn_output, training=training)
return self.layernorm2(out1 + ffn_output)
Run Code Online (Sandbox Code Playgroud)
屏蔽的文档可以在此链接下找到:
focus_mask:形状为 [B, T, S] 的布尔掩码,可防止对某些位置的关注。布尔掩码指定哪些查询元素可以关注哪些关键元素,1表示关注,0表示不关注。对于缺少的批次尺寸和头部尺寸,可能会发生广播。
我唯一可以运行的是在图层类外部创建的掩码作为 …
machine-learning transformer-model keras tensorflow attention-model