def apply(self, is_train, x, mask=None):
if mask is not None:
answer_mask = tf.expand_dims(tf.cast(tf.sequence_mask(mask, tf.shape(x)[1]), tf.float32), 2)
if self.apply_mask:
x *= answer_mask
else:
answer_mask = None
if self.reduce == "max":
if mask is not None:
raise NotImplementedError()
return tf.reduce_max(x, axis=1)
elif self.reduce == "mean":
if mask is not None:
return tf.reduce_sum(x * answer_mask, axis=1) / tf.cast(tf.expand_dims(mask, 1), tf.float32)
else:
return tf.reduce_mean(x, axis=1)
elif self.reduce == "sum":
if mask is not None:
return tf.reduce_sum(x * answer_mask, axis=1)
else:
return tf.reduce_sum(x, axis=1)
else:
raise ValueError()
评论列表
文章目录