PyTorch中图像识别模型的测试17 Mar 2025 | 5 分钟阅读 在上一节中,我们实现了一个神经网络或创建了一个对手写数字进行分类的模型。现在,我们通过从网络上获取图像来测试我们的模型。我们使用了以下图像 https://images.homedepot-static.com/productImages/007164ea-d47e-4f66-8d8c-fd9f621984a2/svn/architectural-mailboxes-house-letters-numbers-3585b-5-64_1000.jpg 当您将此链接粘贴到您的浏览器中时,您将看到数字5的图像,如下图所示 ![]() 看完之后,我们会意识到它是数字5。现在,我们将尝试让我们的网络来预测它。 我们有以下步骤来预测数字图像 步骤 1 第一步,我们将执行一个 GET 请求来检索图像数据。要发出 GET 请求,我们需要导入request,如下所示 现在,我们设置一个变量URL,并将链接赋值为一个字符串。 步骤 2 下一步,我们设置一个变量response,它的值将从request的get()方法中获得。 get() 方法将包含两个参数,即URL和stream,stream将等于true。 步骤 3 我们将使用响应的原始内容来获取图像。为此,我们首先必须从 PIL (Python Image Library) 导入 Image ,如下所示。 我们使用图像的 open() 方法,并将响应的原始内容作为参数传递。从该方法返回的值将被赋值给一个名为img的变量,如下所示 现在,我们绘制图像以确保一切正常。 当我们运行它时,会因为PIL而生成错误。我们必须首先安装pillow才能运行此代码。我们必须在anaconda命令提示符上运行 conda install -c anaconda pillow 命令来安装pillow。 当您运行代码时,它将给出预期的输出。 ![]() 步骤 4 我们需要确保图像与神经网络接受训练的内容相对应。我们的图像是1000*1000像素的,所以我们需要把它变成28*28的灰度图像,就像训练数据中的图像一样。在我们的训练图像数据集中,图像有一个黑色背景和一个白色前景,而在上面的图像中,有一个白色背景和一个黑色前景。现在,我们的首要任务是预处理这个图像。 我们将使用 PIL.ImageOps 的 invert () 方法,并将我们的图像作为参数传递。此方法将反转图像的颜色。 此图像是RGB格式的,具有三个像素强度值通道,这将因多种原因而产生问题。为此,我们必须将此图像转换为二进制黑白图像,我们将按如下方式转换此图像 我们将以与转换所有其他训练图像相同的方式转换此图像。我们必须将图像转换为28*28像素,因此我们必须在转换链组合中添加一个参数 resize ,如下所示 现在,我们的图像是张量形式,所以我们必须将它转换为numpy数组。在绘制图像之前,我们必须导入 PIL.ImageOps ,然后按如下方式绘制图像 ![]() 步骤 5 现在,我们将把这个图像输入到我们的神经网络中进行预测。我们将以与MNIST相同的方式进行。 它会给我们预期的预测,如下所示 ![]() 步骤 6 下一步,我们包装我们的验证加载器。它将创建一个对象,允许我们一次遍历一个可变的验证加载器元素。我们通过在我们的dataiter上调用next来一次访问一个元素。 next () 函数将抓取我们的验证数据的第一批数据,并且该验证数据将被拆分为图像和标签,如下所示 为了进行预测,我们必须像以前一样重塑图像,并且我们需要所有图像的输出和预测。 步骤 7 现在,我们将绘制批处理中的图像及其相应的标签。它将在plt的figure函数的帮助下完成,并将fig大小设置为整数25*4的元组,这将指定图形的宽度和高度。 现在,我们从批处理中绘制20个MNIST图像。我们使用add_subplot()方法将一个子图添加到当前图中,并将2、10和idx作为函数的参数传递。这里,2是行数,10是列数,idx是索引。 现在,我们将借助im_show()函数显示我们的图像,并为每个图像图添加标题,如下所示 最后调用plt.show(),它会给我们预期的结果。 ![]() 完整代码![]() ![]() 它正确地预测了除一个之外的所有图像,这是我们深度神经网络所期望的,因为实际上图像分类最好用卷积神经网络来完成。 下一个主题卷积神经网络介绍 |
我们请求您订阅我们的新闻通讯以获取最新更新。