我有两个问题:
- 设张量
T
的形状[n1, n2, n3, n4]
. 让另一个张量为IDX
且形状为[n1, n2]
的int
类型包含所需的索引 . 我怎样才能获得形状张量[n1, n2, n4]
我想要只提取n3
的n3
dim中的那些索引,这些索引在IDX
中指定 . 简单的例子:
x = [[[2, 3, 1, 2, 5],
[7, 1, 5, 6, 0],
[7, 8, 1, 3, 8]],
[[0, 7, 7, 6, 9],
[5, 6, 7, 8, 8],
[2, 3, 2, 9, 6]]]
idx = [[1, 0, 2],
[4, 3, 3]]
res = [[3, 7, 1],
[9, 8, 9]]`
- 给定一个采用1D张量函数func(x,y)的函数如何将其应用于最后一维上的4D张量X,Y,即结果 - 结果为[张,张,k] = f的X张量(X [对于所有i,j,k,i,j,k,:],Y [i,j,k,:]) . 我找到了tf.py_func,但在我的情况下无法获得如何使用它 .
在此先感谢您的帮助!
1 回答
我用
tf.gather_nd
处理问题1 .输入是:
x
:你的张量T
从中提取形状[n1, n2, n3, n4]
我使用了从0到
size(T)
的更清晰的值idx
:要从T
中提取的索引,形状[n1, n2]
并包含0
到n3 - 1
的值结果是:
res
:为idx
中的每个indice提取的T
值,形状[n1, n2, n4]
由于
tf.gather_nd()
期望您创建要在x
中检索的整个索引(例如[1, 0, 4, 1]
),我们必须首先在indices_base
中创建它 .参数
indices
需要成形res + R
,即[n1, n2, n4, R]
,其中R=4
是Tensorx
的等级 .无论如何,这是非常复杂的,我不确定它是否能产生良好的性能 .
P.S:你应该在一个单独的帖子中发布问题2 .