原文
https://blog.csdn.net/xinjieyuan/article/details/95760679
效果
# 比如这个lenght就是记录了第一个句子2个单词,第二个句子2个单词,第三个句子4个单词
lenght = [2,2,4]
mask_data = tf.sequence_mask(lengths=lenght)
# 长度为max(lenght)
array([[ True, True, False, False],
[ True, True, False, False],
[ True, True, True, True]])
# 定义maxlen时
mask_data = tf.sequence_mask(lengths=lenght,maxlen=6)
# 长度为maxlen
array([[ True, True, False, False, False, False],
[ True, True, False, False, False, False],
[ True, True, True, True, False, False]])
# 定义dtype时
mask_data = tf.sequence_mask(lengths=lenght,maxlen=6,dtype=tf.float32)
# 长度为maxlen,数据格式为float32
array([[1., 1., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0.],
[1., 1., 1., 1., 0., 0.]], dtype=float32)
作用
应用场景主要是在填充计算时候使用,比如你把没有单词的位置填充了0,如果纳入了前向传播计算,影响了最终经验损失函数的结果。那么我们如果通过tf.sequence_mask
得到的mask
张量,与损失函数结果进行对照相乘,可以去掉无用的损失值,保证了计算的准确性。