计算梯度的三种⽅法:数值法(numerical gradient),解析法(analytic gradient),反向传播法(Back propagation gradient)⼀个简单的函数: :
结果:
f(x,y,z)=(x+y)z # coding=gbk
"""
function : f(x,y,z) = (x+y)z
"""
# first method 解析法
def grad1(x,y,z):
dx = z
dy = z
dz = (x+y)
return (dx,dy,dz)
# second method 数值法
def grad2(x,y,z,epi):
# dx
fx1 = (x+epi+y)*z
fx2 = (x-epi+y)*z
dx = (fx1-fx2)/(2*epi)
# dy
fy1 = (x+y+epi)*z
照射雷达fy2 = (x+y-epi)*z
dy = (fy1-fy2)/(2*epi)
# dz
fz1 = (x+y)*(z+epi)
fz2 = (x+y)*(z-epi)
dz = (fz1-fz2)/(2*epi)
return (dx,dy,dz)
# third method 反向传播法
def grad3(x,y,z):
very much
# forward
p = x+y;
f = p*z;
# backward
dp = z
dz = p
dx = 1 * dp
dy = 1 * dp
return (dx,dy,dz)
print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad1(1,2,3)))
print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad2(1,2,3,1e-5)))
print ("<df/dx,df/dy,df/dz>: %.2f %.2f %.2f"%(grad3(1,2,3)))
1
2
streambox vcr
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
28
29
30
31现代食品科技
32
33
34
35
第一物联网
36
37
38
39
40
<df/dx,df/dy,df/dz>: 3.00 3.00 3.00
<df/dx,df/dy,df/dz>: 3.00 3.00 3.00
<df/dx,df/dy,df/dz>: 3.00 3.00 3.00