Tensorflow boolean_mask 带动态掩码

Tensorflow boolean_mask with dynamic mask

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

mask.set_shape([None])
tf.boolean_mask(tensor, mask)

它似乎工作正常。有什么理由不这样做吗?

仔细观察 documentation 可以发现它涉及面具的 维数 ,而不是其整体形状:

mask: K-D boolean tensor, K <= N and K must be known statically.

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

当您 运行 mask.set_shape([None]) 时,您强制假设掩码的维度将始终为 1(因为 None 在括号中),尽管元素的数量未知。如果您确定您的蒙版始终是一维的,那么这样做很好。