我有一个张量 tf.shape(X) == [M, N, N] 和一组索引 tf.shape(IDX) == [N, N] . 如何在第一维中使用索引 IDX 形成张量 tf.shape(Y) = [N, N] ,等于 X 的切片?即 Y[i, j] = X[IDX[i, j], i, j] 为所有 i,j = 1..N . 我试过玩 tf.gather_nd 但没有结果:(
tf.shape(X) == [M, N, N]
tf.shape(IDX) == [N, N]
IDX
tf.shape(Y) = [N, N]
X
Y[i, j] = X[IDX[i, j], i, j]
i,j = 1..N
tf.gather_nd
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
1 回答
2016年12月12日更新:
从tensorflow版本0.11开始,可以像numpy一样索引到张量 .
索引也支持渐变 .
你有什么尝试?
好像我报告了tf.gather_nd的错误 . 这是回复
因此,通过版本0.10或更高版本,gather_nd应该像你想要的那样工作 .
但是下面这个有效
所以看起来你现在需要完整的索引描述,而不仅仅是切片0.你也可以试试tf.pack .
您还可以在此处跟踪张量流中索引张量的进度:https://github.com/tensorflow/tensorflow/issues/206