在 PyTorch 中测试深度神经网络

17 Mar 2025 | 4 分钟阅读

我们将用精确的决策边界绘制我们的数据集,这将分离我们的分类结果。 在此,我们还将测试我们的模型。 以下是训练模型的步骤

步骤 1

第一步,我们定义一个函数 plot_decision_boundary(),它包含两个参数,即我们的训练数据 x 和标签 y。 此函数将返回决策边界的等高线图。

步骤 2

在此步骤中,我们定义一个适当跨越我们数据的网格。 该过程首先定义数据集中 x 和 y 坐标的跨度。 x_span 和 y_span 将定义为 50 个等间距的点,如下所示

步骤 3

在下一步中,我们将定义 xx 和 yy 变量。 xx 和 yy 变量都存储一个方形二维数组,该数组将从 numpy 的 meshgrid() 函数中获得。

meshgrid() 函数将向量 x_span 和 y_span 都作为参数。 两个向量都包含 50 个元素,此函数将返回一个 50 * 50 矩阵的二维数组。 新添加的行将是 x_span 向量中原始行的重复副本,并将返回给 xx 变量。 y_span 的过程相同; 它将返回一个 50*50 矩阵的二维数组,其中新添加的列将是 y_span 向量中原始列的重复副本。 此矩阵将返回给 yy 变量。

步骤 4

借助这些新创建的矩阵 xx 和 yy,我们将创建一个覆盖整个数据集的笛卡尔网格。 为此,我们首先必须使用 ravel() 方法将 xx 和 yy 矩阵转换为一维。

步骤 5

现在,我们将有 50 个 x 坐标,为了定义我们的网格,我们必须以列 y 排列方式连接这些数组。 这将借助 c_[] 完成。

现在,我们将使用 torch.Tensor() 将它们转换为张量。 这会将 50*50 网格转换为张量数据。

步骤 5

现在,最终,我们可以使用带有网格作为唯一参数的 model .forward()。 通过将整个网格张量馈送到 model.forward() 函数,训练后的模型将测试 50*50 网格内的所有点,这将返回一个预测张量。

此预测指示任何给定点被标记为 1 的概率,我们将此张量存储在变量 pred_func 中。

步骤 5

现在,我们将 pred_func 重塑为与原始 xx 和 yy 维度相同的维度形状。

这将生成一个错误; 我们将使用 detach 方法,该方法从梯度计算中排除任何子图,该子图将与 pred_fun 中的值相关联。

步骤 6

现在,我们的下一步是将我们的预测结果链接到它们相应的坐标对应物。 为此,我们将使用 plt.contourf(),它将使用 xx、yy 和 z 创建预测结果的等高线图。

步骤 7

现在,我们将首先调用 plot_decision_boundary() 方法,然后我们将调用我们之前定义的 scatter_plot() 方法。 这将可视化我们的数据,如下所示


Testing of Deep Neural Network in PyTorch
Testing of Deep Neural Network in PyTorch

步骤 8

我们将重新绘制我们的拟合模型,为此,我们必须对我们将初始化的随机点进行预测。 我们将取两个点以便更好地理解

步骤 9

现在,下一步是绘制该点以用于可视化目的,以便我们可以确定该点位于哪个类(1 或 0)。

点 p1 最初是张量形式,因此我们通过类型转换将该点更改为 numpy。


Testing of Deep Neural Network in PyTorch

步骤 9

我们可以对该点进行预测。 我们将预测该点属于正区域 2 类 1 的概率。 我们知道所有橙色点都标记为 1,所有蓝色点都标记为 0。 因此概率确定为


Testing of Deep Neural Network in PyTorch

步骤 10

现在,我们将回到我们的类初始化并创建一个具有参数的名为 predict 的方法。 我们使用 self.forward(x) 来查找概率。 如果概率大于 0.5,那么我们将返回类 1,否则返回 0。

步骤 11

最后,我们将添加 print 语句,该语句使用 predict 方法告诉我们有关该类的信息,如下所示


Testing of Deep Neural Network in PyTorch

很明显,我们的模型运行平稳,并为我们提供了具有随机数据的准确结果。

完整代码

输出

Testing of Deep Neural Network in PyTorch
Testing of Deep Neural Network in PyTorch
下一个主题图像识别