我尝试使用两个不同Tensor的值和一个二维索引数组来构造一个Tensor,其方式与TensorFlow自差分兼容。
第一步,我想提取形状为(n,n)
的TensorD
中的元素,这些元素的值与另一Tensora
中的元素的值相同。
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)
在append步骤中,我只使用第一个值相等的示例,因为我感兴趣的函数与这个选择无关。我需要使用isclose,因为这两个数组是float32数组,彼此并不完全相等。
第二步,把P_x
和P_y = tf.gather(g, indices)
组合起来,构造一个TensorP
,假设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还很陌生,所以尽管浏览了文档,我还是没有找到使用gather、scatter等来完成所有这些操作的方法,而这似乎是使autodiff工作所必需的。当我使用循环和其他方法时,我得到的梯度=无。
1条答案
按热度按时间2hh7jdfx1#
第一步,您可以使用
broadcasting
查找最接近的匹配,从而将循环简化为矩阵运算。示例:
numpy.is()操作
D凑近一凑: