如何使用Keras实施注意力

时间:2018-10-04 22:12:19

标签: python tensorflow keras

我有一个keras模型,该模型具有输入序列和输出序列,其中每个输入都有一个关联的输出(标签)。

model = Sequential()
model.add(Masking(mask_value=5, input_shape= (Seq_in.shape[1],1)))
model.add(Bidirectional(LSTM(256,  return_sequences=True)))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(256, return_sequences=True))) 
model.add(Dropout(0.2))
model.add(Dense(n_Labels, activation='softmax'))  # n_Labels is the number of labels which is 15
sgd = optimizers.SGD(lr=.1,momentum=0.9,decay=1e-3,nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
model.fit(X_train,Y_train,epochs=2, validation_data=(X_val, Y_val),verbose=1)

现在我想在Zhou等人的工作之后实现注意力机制: “基于注意力的双向长期短期记忆网络用于关系分类”。

  

对于每个输出,我们计算出每个输出状态的tanh   序列(本文中的方程9),然后我们为每个序列计算softmax   关于当前输出(Eq#10)的输出状态,则我们   将每个输出状态乘以相应的softmax(注意)   (方程11),然后取加权状态的总和,然后取   表示的最终输出的tanh。最后我们串联   具有输出状态的注意力向量。

我该怎么做?使用keras API可以做到这一点,还是我必须提出自己的自定义层?有帮助吗?

提前谢谢您。...

1 个答案:

答案 0 :(得分:0)

还没有Keras API。但是,许多勤奋的程序员使用Keras进行了一些不错的实现。您可以尝试查看keras-monotonic-attention中的代码。