当前位置:   article > 正文

计算梯度的方法_怎么算梯度

怎么算梯度

计算梯度的三种方法: 数值法(numerical gradient),解析法(analytic gradient),反向传播法(Back propagation gradient)

一个简单的函数:

Python:

  1. # coding=gbk
  2. """
  3. function : f(x,y,z) = (x+y)z
  4. """
  5. # first method 解析法
  6. def grad1(x,y,z):
  7. dx = z
  8. dy = z
  9. dz = (x+y)
  10. return (dx,dy,dz)
  11. # second method 数值法
  12. def grad2(x,y,z,epi):
  13. # dx
  14. fx1 = (x+epi+y)*z
  15. fx2 = (x-epi+y)*z
  16. dx = (fx1-fx2)/(2*epi)
  17. # dy
  18. fy1 = (x+y+epi)*z
  19. fy2 = (x+y-epi)*z
  20. dy = (fy1-fy2)/(2*epi)
  21. # dz
  22. fz1 = (x+y)*(z+epi)
  23. fz2 = (x+y)*(z-epi)
  24. dz = (fz1-fz2)/(2*epi)
  25. return (dx,dy,dz)
  26. # third method 反向传播法
  27. def grad3(x,y,z):
  28. # forward
  29. p = x+y;
  30. f = p*z;
  31. # backward
  32. dp = z
  33. dz = p
  34. dx = 1 * dp
  35. dy = 1 * dp
  36. return (dx,dy,dz)
  37. print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad1(1,2,3)))
  38. print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad2(1,2,3,1e-5)))
  39. print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad3(1,2,3)))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

结果:

  1. <df/dx,df/dy,df/dz>: 3.00 3.00 3.00
  2. <df/dx,df/dy,df/dz>: 3.00 3.00 3.00
  3. <df/dx,df/dy,df/dz>: 3.00 3.00 3.00
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/427961?site
推荐阅读
相关标签
  

闽ICP备14008679号