Я реализовал модель, как описано в (Классификация текста с помощью Transformer) https://keras.io/examples/nlp/text_classification_with_transformer/
Я хотел бы получить доступ к значениям внимания для конкретного примера.
Насколько я понимаю, внимание рассчитывается примерно в этом месте:
class TransformerBlock(layers.Layer):
[...]
def call(self, inputs, training):
attn_output = self.att(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)
[...]
embed_dim = 32 # Embedding size for each token
num_heads = 2 # Number of attention heads
ff_dim = 32 # Hidden layer size in feed forward network inside transformer
inputs = layers.Input(shape=(maxlen,))
embedding_layer = TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim)
x = embedding_layer(inputs)
transformer_block = TransformerBlock(embed_dim, num_heads, ff_dim)
x = transformer_block(x)
x = layers.GlobalAveragePooling1D()(x)
x = layers.Dropout(0.1)(x)
x = layers.Dense(20, activation="relu")(x)
x = layers.Dropout(0.1)(x)
outputs = layers.Dense(2, activation="softmax")(x)
If I do:
A=(model.layers[2].att(model.layers[1](model.layers[0]((X_train[0,:])))))
Я могу получить матрицу размером maxlen
xnum_heads
.
Как мне интерпретировать эти коэффициенты?