def apply(self, is_train, x, c, mask=None, context_mask=None):
x = dropout(x, self.keep_probs, is_train)
c = dropout(c, self.context_keep_probs, is_train)
init = get_keras_initialization(self.init)
x_w = tf.get_variable("merge_x_weights", (x.shape.as_list()[-1], self.output_size), initializer=init)
c_w = tf.get_variable("merge_context_weights", (c.shape.as_list()[-1], self.output_size), initializer=init)
output = tf.tensordot(x, x_w, axes=[[2], [0]]) + tf.expand_dims(tf.matmul(c, c_w), 1)
if self.use_dots:
dots = tf.einsum("aij,aj->aij", x, c)
dot_w = tf.get_variable("dot_weights", (c.shape.as_list()[-1], self.output_size), initializer=init)
output += tf.tensordot(dots, dot_w, axes=[[2], [0]])
bais = tf.get_variable("merge_bias", (1, 1, self.output_size))
output += bais
return get_keras_activation(self.activation)(output)
评论列表
文章目录