在 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() 方法。 这将可视化我们的数据,如下所示 ![]() ![]() 步骤 8 我们将重新绘制我们的拟合模型,为此,我们必须对我们将初始化的随机点进行预测。 我们将取两个点以便更好地理解 步骤 9 现在,下一步是绘制该点以用于可视化目的,以便我们可以确定该点位于哪个类(1 或 0)。 点 p1 最初是张量形式,因此我们通过类型转换将该点更改为 numpy。 ![]() 步骤 9 我们可以对该点进行预测。 我们将预测该点属于正区域 2 类 1 的概率。 我们知道所有橙色点都标记为 1,所有蓝色点都标记为 0。 因此概率确定为 ![]() 步骤 10 现在,我们将回到我们的类初始化并创建一个具有参数的名为 predict 的方法。 我们使用 self.forward(x) 来查找概率。 如果概率大于 0.5,那么我们将返回类 1,否则返回 0。 步骤 11 最后,我们将添加 print 语句,该语句使用 predict 方法告诉我们有关该类的信息,如下所示 ![]() 很明显,我们的模型运行平稳,并为我们提供了具有随机数据的准确结果。 完整代码输出 ![]() ![]() 下一个主题图像识别 |
我们请求您订阅我们的新闻通讯以获取最新更新。