in code/scripts/layers.py [0:0]
def _compute_weight(self, F, query, key, mask=None):
if self._units is not None:
query = self._proj_query(query)
if not self._luong_style:
key = self._proj_key(key)
elif F == mx.nd:
assert query.shape[-1] == key.shape[-1], 'Luong style attention requires key to ' \
'have the same dim as the projected ' \
'query. Received key {}, query {}.'.format(
key.shape, query.shape)
if self._normalized:
query = self._l2_norm(query)
key = self._l2_norm(key)
if self._scaled:
query = F.contrib.div_sqrt_dim(query)
att_score = F.batch_dot(query, key, transpose_b=True) / self._temperature
att_weights = self._dropout_layer(_masked_softmax(F, att_score, mask, self._dtype))
return att_weights