【问题标题】:Tensorflow boolean_mask with dynamic mask带有动态掩码的 TensorFlow boolean_mask
【发布时间】:2018-08-05 08:20:26
【问题描述】:

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

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

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

【问题讨论】:

  • documentation 表示蒙版的维度必须是静态已知的,而不是整个形状。
  • 如果我不使用 set_shape,我会收到以下错误:File "C:\Users\abc\Anaconda3\envs\tf\lib\site-packages\tensorflow\python\ops\array_ops .py”,第 1192 行,在 boolean_mask “必须指定掩码维度的数量,即使某些维度”ValueError:必须指定掩码维度的数量,即使某些维度是无。例如。 shape=[None] 可以,但 shape=None 不行。
  • shape=None 表示形状完全未知,包括维数。 shape=[None] 表示形状是一维的,具有未知数量的元素。
  • 所以tensorflow在建图的时候无法计算mask的形状,所以在确定mask会有一维的情况下,设置shape为[None]就可以了?跨度>
  • 是的,没错!

标签: tensorflow shape mask


【解决方案1】:

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

mask: K-D 布尔张量,K

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

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

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多