具有动态掩码的Tensorflow boolean_mask

时间:2018-02-25 22:05:35

标签: tensorflow shape mask

boolean_mask的文档说明必须静态地知道掩码的形状。但如果你这样做

mask.set_shape([None])
tf.boolean_mask(tensor, mask)
它似乎工作正常。有没有理由不这样做?

1 个答案:

答案 0 :(得分:2)

查看documentation会发现它涉及面具的维度,而不是整个形状:

  

mask:K-D布尔张量,K <= N和K必须静态知道。

你的面具现在大小为None,这意味着它的静态形状完全未知,包括尺寸。您可以选择确保掩码的维度是静态已知的(例如,确保其由输出维度已知的操作生成,或者为已知维度的占位符提供),或者强制执行有关您的大小的信息知道,但在构建计算图时无法推断。后者可以通过set_shape完成。

当您运行mask.set_shape([None])时,您正在强制执行假设,即掩码的维度始终为1(因为None在括号中),尽管元素的数量未知。如果你确定你的面具总是一维的,那就可以了。