Skip to content

Instantly share code, notes, and snippets.

@pythonlessons
Created August 16, 2023 12:45
Show Gist options
  • Select an option

  • Save pythonlessons/450d490c4fbc097e1b1de271591a404d to your computer and use it in GitHub Desktop.

Select an option

Save pythonlessons/450d490c4fbc097e1b1de271591a404d to your computer and use it in GitHub Desktop.
transformer_attention
class CrossAttention(BaseAttention):
"""
A class that implements the cross-attention layer by inheriting from the BaseAttention class.
This layer is used to process two different sequences and attends to the context sequence while processing the query sequence.
Methods:
call: Performs the forward pass of the layer.
Attributes:
mha (tf.keras.layers.MultiHeadAttention): The MultiHeadAttention layer.
layernorm (tf.keras.layers.LayerNormalization): The LayerNormalization layer.
add (tf.keras.layers.Add): The Add layer.
"""
def call(self, x: tf.Tensor, context: tf.Tensor) -> tf.Tensor:
"""
The call function that performs the cross-attention operation.
Args:
x (tf.Tensor): The query (expected Transformer results) sequence of shape (batch_size, seq_length, d_model).
context (tf.Tensor): The context (inputs to the Encoder layer) sequence of shape (batch_size, seq_length, d_model).
Returns:
tf.Tensor: The output sequence of shape (batch_size, seq_length, d_model).
"""
attn_output, attn_scores = self.mha(query=x, key=context, value=context, return_attention_scores=True)
# Cache the attention scores for plotting later.
self.last_attn_scores = attn_scores
x = self.add([x, attn_output])
x = self.layernorm(x)
return x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment