用于图像识别的神经网络验证17 Mar 2025 | 4 分钟阅读 在训练部分,我们对MNIST数据集(无限数据集)训练了我们的模型,它似乎达到了合理的损失和准确性。如果模型能够利用它学到的东西并将其泛化到新数据,那么这将是对其性能的真正考验。这将通过以下步骤完成 步骤 1 我们将借助我们在训练部分创建的训练数据集来创建我们的验证集。这次我们将 train 设置为 false 步骤 2 现在,正如我们在训练部分声明了一个训练加载器一样,我们将在验证部分声明一个验证加载器。验证加载器也将以与我们创建训练加载器相同的方式创建,但这次我们传递训练加载器而不是训练数据集,并且我们设置 shuffle 等于 false,因为我们不会训练我们的验证数据。不需要打乱它,因为它仅用于测试目的。 步骤 3 我们的下一步是在每个 epoch 分析验证损失和准确性。为此,我们必须为验证运行丢失和验证运行丢失更正创建两个列表。 步骤 4 在下一步中,我们将验证模型。模型将验证相同的 epoch。在我们完成迭代整个训练集以训练我们的数据后,我们现在将迭代我们的验证集以测试我们的数据。 我们将首先衡量两件事。第一个是我们的模型的性能,即它对验证集上的测试集进行了多少次正确分类,以检查过拟合。我们将把验证的运行损失和运行更正设置为 步骤 5 我们现在可以遍历我们的测试数据。因此,在 else 语句之后,我们将为标签和输入定义一个循环语句 步骤 6 当我们遍历图像批处理时,我们必须将它们展平,并且我们必须借助 view 方法来重塑它们。 注意:每个图像张量的形状是 (1, 28, and 28),这意味着总共有 784 个像素。根据神经网络的结构,我们的输入值将乘以连接我们的输入层到第一个隐藏层的权重矩阵。为了进行这种乘法,我们必须使我们的图像一维化。而不是每个图像有 28 行两列,我们必须将其展平为 784 个像素的单行。 现在,在这些输入的帮助下,我们得到输出为 步骤 7 在输出的帮助下,我们将计算总的分类交叉熵损失,并且输出最终与实际标签进行比较。 我们没有训练我们的神经网络,因此无需调用 zero_grad()、backward() 或任何此类操作。并且也不再需要计算导数。在操作范围以节省内存时,我们在使用 torch 的 For 循环之前调用 no_grad() 方法 它将暂时将所有需要梯度标志设置为 false。 步骤 8 现在,我们将以与计算训练损失和训练准确度相同的方式计算验证损失和准确度,如下所示: 步骤 9 现在,我们将计算验证 epoch 损失,这与我们计算训练 epoch 损失的方式相同,即我们将总运行损失除以数据集的长度。所以它将被写为 步骤 10 我们将打印验证损失和验证准确度如下: ![]() 步骤 11 现在,为了更好地理解,我们将对其进行绘制以用于可视化目的。我们将将其绘制为 ![]() ![]() 完整代码下一个主题图像识别模型的测试 |
我们请求您订阅我们的新闻通讯以获取最新更新。