张量的形状为 [?, 0] -- 如何重塑为 [?,]
Tensor has shape [?, 0] -- how to reshape to [?,]
当 src
具有形状 [?]
时,tf.gather(src, tf.where(src != 0))
returns 具有形状 [?, 0]
的张量。我不确定维度如何具有大小 0,而且我尤其不确定如何将张量改回来。我也没有在文档中找到任何解释这一点的内容。
我试过 tf.transpose(tensor)[0]
,但是转置张量的第一维大小为 0,无法访问!怎么了?
我认为你应该使用 tf.not_equal
对张量进行元素比较。
src = tf.constant([0, 1, 1, 0], dtype=tf.int8)
tf.gather(src, tf.where(tf.not_equal(src, 0))).eval(session=tf.Session())
array([[1],
[1]], dtype=int8)
您也可以将其缩短一点并使用 tf.boolean_mask
代替 tf.where
和 tf.gather
:
tf.boolean_mask(src, tf.not_equal(src, 0)).eval(session=tf.Session())
array([1, 1], dtype=int8)
注意输出形状的差异。
当 src
具有形状 [?]
时,tf.gather(src, tf.where(src != 0))
returns 具有形状 [?, 0]
的张量。我不确定维度如何具有大小 0,而且我尤其不确定如何将张量改回来。我也没有在文档中找到任何解释这一点的内容。
我试过 tf.transpose(tensor)[0]
,但是转置张量的第一维大小为 0,无法访问!怎么了?
我认为你应该使用 tf.not_equal
对张量进行元素比较。
src = tf.constant([0, 1, 1, 0], dtype=tf.int8)
tf.gather(src, tf.where(tf.not_equal(src, 0))).eval(session=tf.Session())
array([[1],
[1]], dtype=int8)
您也可以将其缩短一点并使用 tf.boolean_mask
代替 tf.where
和 tf.gather
:
tf.boolean_mask(src, tf.not_equal(src, 0)).eval(session=tf.Session())
array([1, 1], dtype=int8)
注意输出形状的差异。