gpt4 book ai didi

python - Tensorflow 梯度 : without automatic implicit sum

转载 作者:太空狗 更新时间:2023-10-30 00:48:22 25 4
gpt4 key购买 nike

在 tensorflow 中,如果有两个张量 xy 并且想要获得 y 相对于 的梯度x 使用 tf.gradients(y,x)。那么实际得到的是:

gradient[n,m] = sum_ij d y[i,j]/ d x[n,m]

y 的索引有一个总和,有没有办法避免这个隐含的总和?获取整个梯度张量 gradient[i,j,n,m]?

最佳答案

这是我的工作,只是取每个分量的导数(@Yaroslav 也提到过),然后在 2 阶张量(矩阵)的情况下再次将它们打包在一起:

import tensorflow as tf

def twodtensor2list(tensor,m,n):
s = [[tf.slice(tensor,[j,i],[1,1]) for i in range(n)] for j in range(m)]
fs = []
for l in s:
fs.extend(l)
return fs

def grads_all_comp(y, shapey, x, shapex):
yl = twodtensor2list(y,shapey[0],shapey[1])
grads = [tf.gradients(yle,x)[0] for yle in yl]
gradsp = tf.pack(grads)
gradst = tf.reshape(gradsp,shape=(shapey[0],shapey[1],shapex[0],shapex[1]))
return gradst

现在 grads_all_comp(y, shapey, x, shapex) 将以所需格式输出 4 阶张量。这是一种非常低效的方法,因为所有东西都需要被分割并重新打包在一起,所以如果有人找到更好的方法,我会非常有兴趣看到它。

关于python - Tensorflow 梯度 : without automatic implicit sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com