Complete the code to create a simple Transformer encoder layer using TensorFlow.
import tensorflow as tf encoder_layer = tf.keras.layers.TransformerEncoderLayer( num_heads=8, key_dim=64, dropout=[1] )
The dropout rate should be a small positive float like 0.1 to prevent overfitting.
Complete the code to apply multi-head attention in TensorFlow.
mha = tf.keras.layers.MultiHeadAttention(num_heads=4, key_dim=32) query = tf.random.uniform((1, 60, 32)) value = tf.random.uniform((1, 60, 32)) output = mha(query=[1], value=value, key=value)
The query argument should be the query tensor, here named 'query'.
Fix the error in the Transformer model definition by filling the correct activation function.
from tensorflow.keras import layers class SimpleTransformer(tf.keras.Model): def __init__(self): super().__init__() self.dense = layers.Dense(64, activation=[1]) def call(self, inputs): return self.dense(inputs)
ReLU is commonly used as activation in Transformer feed-forward layers.
Fill both blanks to create a positional encoding matrix for Transformer input.
import numpy as np def positional_encoding(position, d_model): angle_rads = np.arange(position)[:, np.newaxis] / np.power(10000, (2 * (np.arange(d_model)[1])) / d_model) pos_encoding = np.zeros((position, d_model)) pos_encoding[:, 0::2] = np.sin(angle_rads[:, 0::2]) pos_encoding[:, 1::2] = np.cos(angle_rads[:, [2]]) return pos_encoding
The modulo 2 operation selects even and odd indices for sine and cosine respectively.
Fill all three blanks to build a Transformer encoder block with normalization and dropout.
from tensorflow.keras import layers class EncoderBlock(layers.Layer): def __init__(self, d_model, num_heads, dff, rate=0.1): super().__init__() self.mha = layers.MultiHeadAttention(num_heads=[1], key_dim=d_model) self.ffn = tf.keras.Sequential([ layers.Dense(dff, activation=[2]), layers.Dense(d_model) ]) self.layernorm1 = layers.LayerNormalization(epsilon=1e-6) self.dropout1 = layers.Dropout(rate=[3]) def call(self, x, training): attn_output = self.mha(x, x) attn_output = self.dropout1(attn_output, training=training) out1 = self.layernorm1(x + attn_output) ffn_output = self.ffn(out1) return ffn_output
Number of heads is 8, activation is relu, and dropout rate is 0.1 for typical Transformer encoder.
