Python 如何从注意力课堂获取注意力权重

Python 如何从注意力课堂获取注意力权重,python,keras,attention-model,Python,Keras,Attention Model,我感兴趣的是从课堂上获得注意力权重,而不是自我。W(层的权重)。谁能告诉我怎么做 以下是我所做的: MAX\u SENT\u LENGTH=40 当我尝试将模型创建为: sentcoder=Model(句子输入,加权输入) 它抛出以下错误: 模型的输出张量必须是Keras张量。找到:和{轴=, acc_dtype=float64}.0 这就是Richard在他的博客中提到的。权重是由输入X驱动的,输入X是GRU输出之上的密集层,每个句子中嵌入单词。你需要做一个向前传球来获得你需要的注意力权重…

我感兴趣的是从课堂上获得注意力权重,而不是自我。W(层的权重)。谁能告诉我怎么做

以下是我所做的:
MAX\u SENT\u LENGTH=40

当我尝试将模型创建为:
sentcoder=Model(句子输入,加权输入)

它抛出以下错误:

模型的输出张量必须是Keras张量。找到:和{轴=, acc_dtype=float64}.0


这就是Richard在他的博客中提到的。权重是由输入X驱动的,输入X是GRU输出之上的密集层,每个句子中嵌入单词。你需要做一个向前传球来获得你需要的注意力权重…我也不确定如何访问这个自定义keras层中的权重..如果你找到一种访问权重的方法并将self.W中的W设置为调用中的self.weights..那么你可以使用get_weights来获得这些权重
class AttLayer(Layer):
    def __init__(self, **kwargs):
        self.init = initializations.get('normal')
        #self.input_spec = [InputSpec(ndim=3)]
        super(AttLayer, self).__init__(** kwargs)

    def build(self, input_shape):
        assert len(input_shape)==3
        #self.W = self.init((input_shape[-1],1))
        self.W = self.init((input_shape[-1],))
        #self.input_spec = [InputSpec(shape=input_shape)]
        self.trainable_weights = [self.W]
        super(AttLayer, self).build(input_shape)  # be sure you call this somewhere!

    def call(self, x, mask=None):
        eij = K.tanh(K.dot(x, self.W))

        ai = K.exp(eij)
        weights = ai/K.sum(ai, axis=1).dimshuffle(0,'x')

        weighted_input = x*weights.dimshuffle(0,1,'x')
        return weighted_input.sum(axis=1)

    def get_output_shape_for(self, input_shape):
        return (input_shape[0], input_shape[-1])