def call(self, x: tf.Tensor, *args, **kw_args) -> tf.Tensor: size = x.size() x = x.view(*size[:2], -1) f, g, h = self.query(x), self.key(x), self.value(x) # beta = F.softmax(torch.bmm(f.permute(0, 2, 1).contiguous(), g), dim=1) # o = self.gamma * torch.bmm(h, beta) + x return None # o.view(*size).contiguous()
def get_energies(self, y: tf.Tensor, weights_in_time: tf.Tensor): weight_sum = tf.cond(tf.greater(weights_in_time.size(), 0), lambda: tf.reduce_sum(weights_in_time, axis=0), lambda: 0.0) coverage = weight_sum / self.fertility * self.attention_mask coverage_exp = tf.expand_dims(tf.expand_dims(coverage, -1), -1) logits = tf.reduce_sum( self.similarity_bias_vector * tf.tanh(self.hidden_features + y + self.coverage_weights * coverage_exp), [2, 3]) return logits
def get_energies(self, y: tf.Tensor, weights_in_time: tf.Tensor): weight_sum = tf.cond( tf.greater(weights_in_time.size(), 0), lambda: tf.reduce_sum(weights_in_time, axis=0), lambda: 0.0) coverage = weight_sum / self.fertility * self.attention_mask coverage_exp = tf.expand_dims(tf.expand_dims(coverage, -1), -1) logits = tf.reduce_sum( self.similarity_bias_vector * tf.tanh( self.hidden_features + y + self.coverage_weights * coverage_exp), [2, 3]) return logits