莫度编程网

技术文章干货、编程学习教程与开发工具分享

如何使用Python,绘制3D的多元函数图像

大家好,今天要讲的内容是,多元函数图像的绘制。

在深度学习中,损失函数通常是多元函数:

因此将多元函数可视化,有助于理解损失函数的性质,进而指导模型的训练。

在本节课中,我们将详细讨论,如何使用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。

将坐标系修改为二维,其他代码不变,可以生成二维的等高线图。

二维等高线图经常用于展示梯度下降算法。每个相同颜色的圆圈,代表了相同的高度。

那么到这里,多元函数图像的绘制,就讲完了,感谢大家的观看,我们下节课再会。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43