我有一个张量tf.shape(X) == [M, N, N]
和一组索引tf.shape(IDX) == [N, N]
。如何在第一维中使用索引tf.shape(Y) = [N, N]
形成张量X
,等于IDX
的切片?即
所有Y[i, j] = X[IDX[i, j], i, j]
i,j = 1..N
。
我曾尝试使用tf.gather_nd
,但没有结果:(
答案 0 :(得分:2)
2016年12月12日更新:
从tensorflow版本0.11开始,可以像numpy一样索引到张量。
a = tf.Variable([9,10,11])
b = tf.constant([[1,2,3,4],[5,6,7,8]])
a = b[0,1:]
索引也支持渐变。
你有什么尝试?
似乎我报告了tf.gather_nd的错误。 这是回复
最近增加了对gather_nd中支持部分索引(比维度更少的索引)的支持。您使用的是TensorFlow版本,其中每个索引张量必须具有恰好的张量维数。代码应该在HEAD工作。
因此,在版本0.10或更高版本下,gather_nd应该可以像你想要的那样工作。
然而,以下工作
import tensorflow as tf
x = tf.constant([[1,1,1,1],[1,2,3,4]],shape=(2,4))
indices = [[0,0],[0,1]]
y = tf.gather_nd(x,indices)
所以看起来你现在需要完整的索引描述,而不仅仅是切片0.你也可以试试tf.pack。
您还可以在此处跟踪张量流中索引张量的进度: https://github.com/tensorflow/tensorflow/issues/206