boolean_mask的文档说明必须静态地知道掩码的形状。但如果你这样做
mask.set_shape([None])
tf.boolean_mask(tensor, mask)
它似乎工作正常。有没有理由不这样做?
答案 0 :(得分:2)
查看documentation会发现它涉及面具的维度,而不是整个形状:
mask
:K-D布尔张量,K <= N和K必须静态知道。
你的面具现在大小为None
,这意味着它的静态形状完全未知,包括尺寸。您可以选择确保掩码的维度是静态已知的(例如,确保其由输出维度已知的操作生成,或者为已知维度的占位符提供),或者强制执行有关您的大小的信息知道,但在构建计算图时无法推断。后者可以通过set_shape
完成。
当您运行mask.set_shape([None])
时,您正在强制执行假设,即掩码的维度始终为1(因为None
在括号中),尽管元素的数量未知。如果你确定你的面具总是一维的,那就可以了。