def temporal_padding_mask(mask, kernel_size, padding_size):
"""Pad the middle dimension of a 2D matrix
with "padding" zeros left and right.
Apologies for the inane API, but Theano makes this
really hard.
Code from https://github.com/fchollet/keras/blob/master/keras/backend/theano_backend.py
x: (batch, length)
"""
mask_shape = mask.shape
mask_sum = T.sum(mask, axis=1)
output_length = mask_sum - kernel_size + 2 * padding_size + 1
max_output_length = mask_shape[1] - kernel_size + 2 * padding_size + 1
real_output_length = T.maximum(output_length, 1)
range_base = T.arange(max_output_length)
range_matrix = T.outer(T.ones((mask_shape[0],)), range_base)
mask = (range_matrix < real_output_length[:, None]) * T.constant(1.0)
return mask
评论列表
文章目录