#11.1.2深度学习中的优化挑战 #局部最小值 import numpy import matplotlib.pyplot as plt from matplotlib.pyplot import gca import torch def annotate(text,xy,xytext,**kwargs): return gca().annotate(text, xy=xy, xytext=xytext,arrowprops=dict(facecolor='black',shrink=0.05),)#关键字参数arrowprops中提供箭头属性字典来绘制从文本到注释点的箭头, def f(x): return (x * numpy.cos(numpy.pi * x)) #x=numpy.arange(-1.0,2.0,0.01) x=torch.arange(-1.0,2.0,0.01) plt.xlim(-1,2) plt.ylim(-1.5,2) plt.xlabel('x') plt.ylabel('f(x)') plt.plot(x,f(x)) plt.grid() annotate('local minimum',(-0.3,-0.25),(-0.77,-1.0)) annotate('global minimum',(1.1,-0.95),(0.6,0.8)) plt.show()
#马鞍面 import numpy import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import torch #定义马鞍面的参数范围 x,y=numpy.meshgrid(torch.linspace(-1.0,1.0,101),numpy.linspace(-1.0,1.0,101)) #计算马鞍面的参数范围 z=x**2-y**2 #创建一个3D图形对象 fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.plot_surface(x,y,z,cmap='viridis') #设置坐标轴范围 ticks=[-1.0,0,1.0] plt.xticks(ticks) plt.yticks(ticks) ax.set_zticks(ticks) #设置坐标轴标签 ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.show()
鞍点
import numpy from matplotlib.pyplot import gca import matplotlib.pyplot as plt import torch x=torch.arange(-2.0,2.0,0.01) def annotate(text,xy,xytext): return gca().annotate(text, xy=xy, xytext=xytext,arrowprops=dict(facecolor='black',shrink=0.05),)#关键字参数arrowprops中提供箭头属性字典来绘制从文本到注释点的箭头, def f(x): return x**3 plt.xlim(-2,2) plt.ylim(-10,10) plt.xlabel('x') plt.ylabel('f(x)') plt.plot(x,f(x)) plt.grid() annotate('saddle point',(0,-0.2),(-0.52,-5.0)) plt.show()