获取由TensorFlow中的另一个张量部分索引的切片的好方法是什么?

获取由TensorFlow中的另一个张量部分索引的切片的好方法是什么?,tensorflow,Tensorflow,假设我们有一个第一维未知的张量x(例如[?,32,32,3]),和另一个实际上是标量的张量i。是否有一种很好的方法来获得被第一维度分割的x的i-第个切片,例如,获得维度的张量[32,32,3]?我是TensorFlow的新手,只能想出这个极其笨拙的解决方案 index = tf.concat(0, [i, tf.constant([0, 0, 0], tf.int64)]) size = [1, x.get_shape()[1].value, x.get_shape()[2].value, x.

假设我们有一个第一维未知的张量
x
(例如
[?,32,32,3]
),和另一个实际上是标量的张量
i
。是否有一种很好的方法来获得被第一维度分割的
x的
i
-第个切片,例如,获得维度的张量
[32,32,3]
?我是TensorFlow的新手,只能想出这个极其笨拙的解决方案

index = tf.concat(0, [i, tf.constant([0, 0, 0], tf.int64)])
size = [1, x.get_shape()[1].value, x.get_shape()[2].value, x.get_shape()[3].value]
result = tf.unpack(tf.slice(x, index, size))[0]

您可以利用
-1
size
参数的一个特殊参数,这意味着“该维度中的所有剩余元素”。然后,假设
i
是标量(而不是代码片段中的长度为1的向量),您可以执行以下操作:

result = tf.squeeze(tf.slice(x, tf.pack([index, 0, 0, 0]), [1, -1, -1, -1]), [0])
或者,可以使用从零维张量中选择一个或多个切片。在这种情况下,
i
必须是一个向量:

i = tf.expand_dims(i, 0)  # Converts `i` to a vector if it is a scalar.
result = tf.squeeze(tf.gather(x, i), [0])
在这两种情况下,op都会删除第0个维度以给出三维结果