【发布时间】:2018-02-15 23:12:49
【问题描述】:
我正在将一堆 Numpy 计算移植到 TensorFlow。在我计算的一个阶段,我使用布尔掩码从一个大数组中提取和展平一个值子集。数组可以有多个维度,但布尔掩码仅作用于最后两个维度。在 Numpy 中,它看起来像这样:
mask = np.array([
[False, True , True , True ],
[True , False, True , True ],
[True , True , False, False],
[True , True , False, False]]
large_array_masked = large_array[..., mask]
我不知道如何在 TensorFlow 中做同样的事情。我试过了:
tf.boolean_mask(large_array, mask, axis = -2)
这不起作用,因为tf.boolean_mask() 似乎没有采用负轴参数。
作为一个丑陋的黑客,我尝试使用以下命令强制 mask 广播到与 large_array 相同的形状:
mask_broadcast = tf.logical_and(tf.fill(tf.shape(large_array), True), mask)
large_array_masked = tf.boolean_mask(large_array, mask_broadcast)
看来mask_broadcast 具有我想要的形状和值,但我得到了错误:
ValueError: Number of mask dimensions must be specified, even if some dimensions are None
这可能是因为large_array 是根据输入计算的,因此它的形状不是静态的。
有什么建议吗?
【问题讨论】:
标签: python numpy tensorflow