我使用两个兼容的张量调用tensorflow.boolean_mask
,但维度是off的示例:
for m in range(self.class_dim):
labels_m = loop_labels[m]
mask_m = mask[m]
labels_m = tf.boolean_mask(labels_m, mask_m)
两个输入([512]
)的维度是匹配的,但是一旦我调用boolean_mask
,输出是一个包含219个元素的张量,但是维度是[2]
。什么会导致这种行为?输出形状应为[219]
对于tf.boolean_mask()
函数应该返回的内容存在误解。让我们从文档中提供的一个示例中了解一下它的用法:
import numpy as np
import tensorflow as tf
tensor = np.array(["one", "two", "three", "four"])
mask = np.array([True, False, True, False])
result = tf.boolean_mask(tensor, mask)
结果的值是<tf.Tensor: shape=(2,), dtype=string, numpy=array([b'one', b'three'], dtype=object)>
,因为在4元素掩码数组中只有第1和第3个布尔值是True
。为了使结果的形状与输入的形状相同,遮罩中的所有值必须为True
,以防止被遮罩移除。