大家好,今天要讲的内容是,多元函数图像的绘制。
在深度学习中,损失函数通常是多元函数:
因此将多元函数可视化,有助于理解损失函数的性质,进而指导模型的训练。
在本节课中,我们将详细讨论,如何使用python,绘制出多元函数的图像。
1.什么是网格数据
为了绘制出三维空间中的图形,需要使用到网格数据。
网格数据是一个均匀的点阵,它对应了三维空间中,底面上的坐标点。
下面通过代码,进一步说明网格数据:
首先创建一个画板对象board,并使用add_subplot添加一个三维的坐标轴。
运行程序,会得到一个空的三维坐标系。
我们将三维坐标系调整到俯视角度,会看到底面是网格的形状:
为了生成3d图像,就需要首先生成,像底面一样的网格数据。
2.二元函数的绘制
二元函数z=x^2+y^2上的每个点,都包含了x、y、z,三个坐标值:
为了绘制该函数的图像,我们可以枚举底面x-o-y上的100个(x, y)坐标。
将它们带入到z的表达式中,就计算出了函数值z。
接着将这100个(x, y, z)数据点,通过绘制到三维空间中:
连接成曲面,就形成了z=x^2+y^2的图像了。
如果将z=x^2+y^2的图像调整到俯视角度,会发现有很多的小格子。
这些小格子之间的交叉点,就是网格数据,对应底面的100个(x, y)坐标。
另外,我们可以在底面上取得40*40=1600个点。
基于更多的(x, y)坐标,可以绘制出更精细的二元函数图像。
样例代码如下:
首先定义10乘10大小的二维数组x和y,对应底面中100个数据点的横坐标和纵坐标。
然后计算z=x^2+y^2,对应这 100个数据点的函数值。
接着,创建画板,使用plot_surface函数,绘制3D图形。
运行程序,就得到了二元函数z的图像:
3.使用矩阵保存网格数据
我们使用矩阵保存底面上的网格数据点(x, y)。
X和Y是两个矩阵,分别代表底面上的横轴x和纵轴y的坐标矩阵。
例如,在底面标记A到F,6个点。
将这6个点的横坐标放入X矩阵,纵坐标放入Y矩阵,就得到了X和Y两个坐标矩阵。
为了更容易的生成网格数据点的坐标矩阵:
可以使用numpy中的arange函数,生成等间距的列表x和列表y。
再使用meshgrid将x和y,两两组合,生成网格矩阵x和y。
例如,首先生成0到3,间隔为1的列表x和y,打印x和y。
会看到其中保存了0、1、2、3。
然后将x和y传入meshgrid,可以将它们组合为4*4的坐标矩阵。
接着再打印x和y,它们是4*4的二维数组。
下面重新实现z=x^2+y^2图像的绘制:
首先创建画板,然后通过arange生成-2到2,间隔为0.1的列表x和y。
x是底面横轴坐标,y是底面纵轴坐标。
接着使用meshgrid生成坐标矩阵。
根据X和Y,计算Z的值。
调用plot_surface绘制出Z的图像。
运行程序,可以得到二元函数z的图像。
使用网格数据,还可以绘制等高线图:
等高线图,同样可以用于展示损失函数。
例如,使用plt.contour,绘制z=x^2+y^2的三维等高线图像。
其中相同颜色的圆圈,代表了相同的高度z。
将坐标系修改为二维,其他代码不变,可以生成二维的等高线图。
二维等高线图经常用于展示梯度下降算法。每个相同颜色的圆圈,代表了相同的高度。
那么到这里,多元函数图像的绘制,就讲完了,感谢大家的观看,我们下节课再会。