Python Tensorflow';s AdditiveAttention实现没有权重

Python Tensorflow';s AdditiveAttention实现没有权重,python,tensorflow,keras,keras-layer,attention-model,Python,Tensorflow,Keras,Keras Layer,Attention Model,我试图了解新(自定义)层是如何在Tensorflow/Keras中实现的。 Bahdanau的额外关注似乎相当直截了当。该机制的一部分是: 这是。但是,查看代码,我似乎找不到应在tanh函数中使用的权重。这让我觉得我对在Tensorflow中构建层了解不够。另一个结论是tensorflow没有实现此处的权重。这似乎不太可能 我想解释一下Tensorflow是如何将此机制作为自定义层实现的 Tensorflow的AdditiveAttention子类如下: def __init__(self,

我试图了解新(自定义)层是如何在
Tensorflow
/
Keras
中实现的。 Bahdanau的额外关注似乎相当直截了当。该机制的一部分是:

这是。但是,查看代码,我似乎找不到应在
tanh
函数中使用的权重。这让我觉得我对在
Tensorflow
中构建层了解不够。另一个结论是
tensorflow
没有实现此处的权重。这似乎不太可能

我想解释一下
Tensorflow
是如何将此机制作为自定义层实现的

Tensorflow的AdditiveAttention子类如下:

 def __init__(self, use_scale=True, **kwargs):
    super(AdditiveAttention, self).__init__(**kwargs)
    self.use_scale = use_scale

  def build(self, input_shape):
    v_shape = tensor_shape.TensorShape(input_shape[1])
    dim = v_shape[-1]
    if isinstance(dim, tensor_shape.Dimension):
      dim = dim.value
    if self.use_scale:
      self.scale = self.add_weight(
          name='scale',
          shape=[dim],
          initializer=init_ops.glorot_uniform_initializer(),
          dtype=self.dtype,
          trainable=True)
    else:
      self.scale = None
    super(AdditiveAttention, self).build(input_shape)
唯一的重量是
self.scale
。稍后,这将在
\u calculate\u scores(查询,键)
中使用
tanh
功能:

math_ops.reduce_sum(scale * math_ops.tanh(q_reshaped + k_reshaped), axis=-1)
可训练权重应乘以查询(
q_整形
)和键(
k_整形
),如Bahdanau分数方程所示

查看
q_整形
k_整形
后,将其传递到
call()
函数中,如下所示:

def call(self, inputs, mask=None, training=None):
    self._validate_call_args(inputs=inputs, mask=mask)
    q = inputs[0]
    v = inputs[1]
    k = inputs[2] if len(inputs) > 2 else v
    q_mask = mask[0] if mask else None
    v_mask = mask[1] if mask else None
    scores = self._calculate_scores(query=q, key=k)
...
应在调用
调用()
后创建权重。(call(),calls build())。所以在我看来,查询和键并没有加权