如何在分层模型中获得注意力权重

时间:2018-07-09 06:14:48

标签: python keras attention-model

型号:

sequence_input = Input(shape=(MAX_SENT_LENGTH,), dtype='int32')
words = embedding_layer(sequence_input)
h_words = Bidirectional(GRU(200, return_sequences=True,dropout=0.2,recurrent_dropout=0.2))(words)
sentence = Attention()(h_words)  #with return true
#sentence = Dropout(0.2)(sentence)
sent_encoder = Model(sequence_input, sentence[0])
print(sent_encoder.summary())

document_input = Input(shape=(None, MAX_SENT_LENGTH), dtype='int32')
document_enc = TimeDistributed(sent_encoder)(document_input)
h_sentences = Bidirectional(GRU(100, return_sequences=True))(document_enc)

preds = Dense(7, activation='softmax')(h_sentences)
model = Model(document_input, preds)

使用的注意层: https://gist.github.com/cbaziotis/6428df359af27d58078ca5ed9792bd6d 与return_attention = True

训练模型后,如何可视化新输入的注意力权重。

我正在尝试:

 get_3rd_layer_output = K.function([model.layers[0].input,K.learning_phase()],
[model.layers[1].layer.layers[3].output])

并传递新的输入,但这给了我错误。

可能的原因: model.layers()只给我最后一层。我希望从时间分布部分获得权重。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容显示模型中的所有图层:

print(model.layers)

一旦您知道“时间分布”层是哪个索引号,例如3,然后使用以下命令获取配置和层权重。

g = model_name.layers[3].get_config()
h = model_name.layers[3].get_weights()
print(g)
print(h)