在神经网络学习中,梯度下降法是一个绕不开的算法,关于梯度下降法的具体内容就不详细叙述了,网上有这方面的资料,下面只给一个python程序的例子实现一个二元函数求最小值。
'''
作者:张新平
日期:2019-03-21
描述:本程序代码是演示梯度下降法,其中getValue是取得一个二元函数的函数值,而getDValeu是获得二元函数的导数值
'''
def getValue(x,y):#返回二元函数的函数值
return 3*x*x+3*y*y+2*x*y-8*x-8*y+9
def getDValeu(x,y):#返回二元函数的导数值
return 6*x+2*y-8,2*x+6*y-8
if __name__=="__main__":
#设置初始值
x=-188.0
y=-140.0
#设置学习率
learn=0.05
i=1
while True:
x1=x
y1=y
value = getValue(x, y)
dx,dy = getDValeu(x, y)
print(i, 'x=', x, ',y=', y, 'z=', value)
x = x - learn * dx#更新x值
y = y - learn * dy#更新x值
i+=1
if (x-x1)**2+(y-y1)**2<0.1**15:#如果前后两次的迭代值的范数非常小,则终止循环
break
图像如下所示:

加载中,请稍候......