首页 文章

用索引切片张量

提问于
浏览
0

我有一个张量 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 但没有结果:(

1 回答

  • 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

相关问题