使用gradients对多个式子求多变量偏导

一 实例描述
两个OP,4个参数,演示使用gradients同时为两个式子4个参数求梯度。
二 代码
import tensorflow as tf
tf.reset_default_graph()
w1 = tf.get_variable('w1', shape=[2])
w2 = tf.get_variable('w2', shape=[2])
w3 = tf.get_variable('w3', shape=[2])
w4 = tf.get_variable('w4', shape=[2])
y1 = w1 + w2+ w3
y2 = w3 + w4

gradients = tf.gradients([y1, y2], [w1, w2, w3, w4], grad_ys=[tf.convert_to_tensor([1.,2.]),
                                                          tf.convert_to_tensor([3.,4.])])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(gradients))
三 运行结果
[array([ 1.,  2.], dtype=float32), array([ 1.,  2.], dtype=float32), array([ 4.,  6.], dtype=float32), array([ 3.,  4.], dtype=float32)]
四 结果说明
gradients中的第三个参数,即给定公式结果的值,来求参数偏导,这里相当于y1为[1,2],y2为[3,4]。对于y1来讲,求关于w1的偏导时,会认为w2和w3为常数,所有w2和w3的导数为0,即w1的梯度就为[1,2]。同理可以得出w2和w3均为[1,2],接着求y2的偏导数,得到w3与w4均为[3,4],然后将两个式子中的w3结果累加起来,所以w3就为[4,6]。

你可能感兴趣的:(人工智能)