二阶求导的outer_grads这句为什么要这么写?
来源:3-11 tf.GradientTape基本使用方法
金紫光禄
2019-07-15
二阶求导的outer_grads这句为什么要这么写?
outer_grads = [outer_tape.gradient(inner_grad,[x1,x2]) for inner_grad in inner_grads]
能不能写成
outer_grads = [outer_tape.gradient(inner_grads,[x1,x2])]
实际结果有些不同,这是为什么?
写回答
1回答
-
正十七
2019-07-25
如果inner_grads作为数组传给tape.gradient, 那么gradient会把inner_grads当成一个目标函数,然后把给两个目标算出来的梯度相加。图中第二个结果6和20,就是第一个结果的每行的加和。
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape#gradient
参考API文档,输出会跟sources也就是例子中的[x1, x2]有一样的size
20
相似问题