【发布时间】:2022-12-11 16:54:39
【问题描述】:
我正在尝试以与 TensorFlow autodiff 兼容的方式使用来自两个不同张量的值和一个二维索引数组来构造一个张量。
在第一步中,我想提取形状为 (n,n) 的张量 D 的元素,其值与另一个张量 a 中的值相同。特别是,我正在寻找一种更好的方法来实现以下循环:
a = []
for i in range(len(f)):
a.append(tf.where(tf.experimental.numpy.isclose(f[I], D, atol=1e-6))[0])
P_x = tf.gather(D,a)
在附加步骤中,我只使用值相等的第一个实例,因为我感兴趣的函数独立于此选择。我需要使用 isclose,因为这两个数组是 float32 数组并且彼此不完全相等。
然后在第二步中,我想将 P_x 与 P_y = tf.gather(g, indices) 结合起来构造一个张量 P。假设P_x和P_y的形状都是(n, )。然后,
P = [[P_x[0], P_y[0]],[P_x[1], P_y[1]], ..., [P_x[n], P_y[n]] ]
我是 TensorFlow 的新手,所以尽管浏览了文档,但我没有看到使用收集、分散等来完成所有这些操作的方法,这似乎是使 autodiff 工作所必需的。当我使用循环和其他方法时,我得到 gradients = none。
【问题讨论】:
标签: numpy tensorflow autodiff