Numpy 填充和屏蔽批处理数据集
表示自然语言的多个字符串时,每个字符串中的字符数可能不相等。然后,返回结果可以放在a中,其中最内层维度的长度取决于每个字符串中的字符数:Numpy 填充和屏蔽批处理数据集,numpy,tensorflow,tensorflow2.0,tensorflow-datasets,Numpy,Tensorflow,Tensorflow2.0,Tensorflow Datasets,表示自然语言的多个字符串时,每个字符串中的字符数可能不相等。然后,返回结果可以放在a中,其中最内层维度的长度取决于每个字符串中的字符数: rtensor=tf.ragged.constant([ [1, 2], [3, 4, 5], [6] ]) 传感器 # 反过来,应用方法将RaggedTensor转换为常规tf.Tensor,然后应用填充操作: batch\u size=3 最大长度=8 tensor=r传感器。to_tensor(默认值=0,形状=(批次大小,最大长度)) # 现在,
rtensor=tf.ragged.constant([
[1, 2],
[3, 4, 5],
[6]
])
传感器
#
反过来,应用方法将RaggedTensor
转换为常规tf.Tensor
,然后应用填充操作:
batch\u size=3
最大长度=8
tensor=r传感器。to_tensor(默认值=0,形状=(批次大小,最大长度))
#
现在,有没有一种方法可以生成一个附加张量,显示什么是原始数据,什么是填充?对于上面的例子,它将是:
正如建议的那样,您只需检查非零值即可。它可以简单地转换为布尔值并返回
将tensorflow导入为tf
R传感器=tf.不规则常数([[1,2],
[3, 4, 5],
[6]])
批量大小=3
最大长度=8
tensor=r传感器。to_tensor(默认值=0,形状=(批次大小,最大长度))
mask=tf.dtypes.cast(tf.dtypes.cast(tensor,tf.bool),tensor.dtype)
打印(mask.numpy())
# [[1 1 0 0 0 0 0 0]
# [1 1 1 0 0 0 0 0]
# [1 0 0 0 0 0 0 0]]
唯一可能的缺点是您最初可能有0
值。在转换为张量时,如果知道数据总是非负的,可以使用其他值作为默认值,例如-1
:
tensor=rtensor.to_tensor(默认值=-1,形状=(批次大小,最大长度))
掩码=tf.dtypes.cast(张量>=0,张量.dtype)
但是如果你想让你的面具为你拥有的任何值工作,你也可以使用粗糙张量:
rtensor\u ones=tf.ones\u like(rtensor)
mask=r传感器,到张量(默认值=0,形状=(批量大小,最大长度))
这样,
mask
将始终是传感器有值的地方。tf.math.not_equal(tensor,0)
?谢谢@jdehesa和@thushv89。这个解决方案非常有趣,因为我有一个很大的数据集要标记。