0


hnu计算机与人工智能概论5.26(梯度下降法)

第1关:用梯度下降法求一元函数的最小值

本关任务:用梯度下降法求函数的最小值,认为当函数导数的绝对值小于1e-6时为函数的最小值处。函数为:

  1. y=−sin(1/10x)−x1/3

,请保留6位小数输出函数最小值以及此时的x值以及迭代次数。 如果超出给定的最大迭代次数10000次,函数导数的绝对值依然大于等于1e-6,则输出False。 注意:x的初值以及学习率从键盘录入

  1. import math
  2. x=eval(input('请输入x的初值:'))
  3. lr=eval(input('请输入学习率:'))#学习率,
  4. precision=1e-6#设置收敛精度,f'(x)与0值的差异
  5. max_iters=10000#最大迭代次数
  6. ###################begin############
  7. def f(x): return -math.sin(x/10)-math.pow(x,1/3)
  8. def df(x): return -(1/10)*math.cos(x/10)-(1/3)*math.pow(x,(-2/3))
  9. for i in range(max_iters):
  10. x=x-df(x) * lr
  11. if abs(df(x)) <precision:
  12. print("x=%.6f"%x)
  13. print('最小值=%.6f'%f(x))
  14. print('迭代次数=',i+1,sep='')
  15. break
  16. else:
  17. print('False')
  18. ##################end#######################

第2关:用梯度下降法求二元函数的最值

本关任务:用梯度下降法求二元函数f(x,y)=x3−y3+3x2+3y2−9x的最小值。要求最小值处的函数偏导数值小于1e-6,设置最大迭代次数10000,如果迭代结束都没有达到精度要求,则输出False,否则以保留8位小数的方式输出最小值以及此时的x值和y值,以及迭代次数。

  1. import numpy as np
  2. seed1,seed2=eval(input('请输入随机数种子:'))
  3. lr=eval(input('请输入学习率:')) #lr是学习率
  4. np.random.seed(seed1)
  5. x=np.random.randn()#二元函数f(x,y)中,自变量x的初值
  6. np.random.seed(seed2)
  7. y=np.random.randn()#二元函数f(x,y)中,自变量y的初值
  8. err=1e-6 ##误差,要求最小值处的函数的两个偏导数的绝对值都小于误差err
  9. max_iters=10000 #最大迭代次数
  10. #请用梯度下降法求出给定二元函数f(x,y)的最值及相关信息
  11. ##################begin################
  12. import numpy as np
  13. def f(x,y):
  14. return x**3-y**3+3*(x**2)+3*(y**2)-9*x
  15. def dx(x,y):
  16. return 3*x**2+6*x-9
  17. def dy(x,y):
  18. return -3*y**2+6*y
  19. for t in range(max_iters):
  20. if abs(dx(x,y))<err and abs(dy(x,y))<err:
  21. print("迭代次数%d,x=%.8f,y=%.8f,f(x,y)=%.8f"%(t,x,y,f(x,y)))
  22. break
  23. x=x-lr*dx(x,y); y=y-lr*dy(x,y)
  24. else: print(False)
标签: 人工智能 python

本文转载自: https://blog.csdn.net/howell55/article/details/130932802
版权归原作者 howell(Python) 所有, 如有侵权,请联系我们删除。

“hnu计算机与人工智能概论5.26(梯度下降法)”的评论:

还没有评论