chain_rule.py 563 B

12345678910111213141516171819202122232425
  1. import tensorflow as tf
  2. # 构建待优化变量
  3. x = tf.constant(1.)
  4. w1 = tf.constant(2.)
  5. b1 = tf.constant(1.)
  6. w2 = tf.constant(2.)
  7. b2 = tf.constant(1.)
  8. with tf.GradientTape(persistent=True) as tape:
  9. # 非tf.Variable类型的张量需要人为设置记录梯度信息
  10. tape.watch([w1, b1, w2, b2])
  11. # 构建2层网络
  12. y1 = x * w1 + b1
  13. y2 = y1 * w2 + b2
  14. # 独立求解出各个导数
  15. dy2_dy1 = tape.gradient(y2, [y1])[0]
  16. dy1_dw1 = tape.gradient(y1, [w1])[0]
  17. dy2_dw1 = tape.gradient(y2, [w1])[0]
  18. # 验证链式法则
  19. print(dy2_dy1 * dy1_dw1)
  20. print(dy2_dw1)