英雄联盟马匹查询器啥意思 英雄联盟怎么玩的( 四 )




resnet变量可以像函数一样调用, 将一个或多个图像作为输入, 并为1000个ImageNet类中的每个类生成对应的分数 。 然而, 在这样做之前, 我们必须对输入图像进行预处理, 使其大小合适, 并且使其值(颜色)大致位于相同的数值范围内 。 为了做到这一点, torchvision模块提供了transforms, 使我们能够快速定义基本预处理功能:




在本例中, 我们定义了一个预处理函数, 将输入图像缩放到256×256, 将图像围绕中心裁剪为224× 224, 将其转换为张量(Pytorch多维数组:在本例中, 是一个具有颜色、高度和宽度的3D数组), 并通过定义均值和标准差对其RGB(红、绿、蓝)分量进行标准化 。 如果我们想让网络产生有意义的答案, 这些需要与训练期间呈现给网络的内容相匹配 。 在第7.1.3节中, 我们将在开始制作自己的图像识别模型时深入讨论转换 。


我们现在可以抓取我们最喜欢的狗的图片(比如说, GitHub repo中的bobby.jpg), 对它进行预处理, 然后看看ResNet对它的看法 。 我们可以通过使用Pilllow(Python的图像处理模块)从本地文件系统加载图像开始(https://pillow.readthedocs.io/en/stable):




如果我们从一个Jupyter笔记本开始跟着一起做, 我们将执行以下操作来查看内联图片(它将在下面显示<PIL.JpegImagePlugin…的位置):




否则, 我们可以调用show方法, 它将弹出一个带有查看器的窗口, 以查看图2.4所示的图像:




【英雄联盟马匹查询器啥意思 英雄联盟怎么玩的】图 2.4 Bobby, 我们非常特殊的输入图片


接下来, 我们可以通过预处理管道传递图像:




然后我们可以按照网络所期望的方式对输入张量进行调整(reshape)、裁剪和规范化 。 我们将在接下来的两章中对此有更多的了解;抓紧时间试一下:




现在我们准备好运行我们的模型了!


在深度学习圈中, 对新数据运行训练模型的过程称为推理 。 为了进行推断, 我们需要将网络置于eval模式:




如果我们忘记了这一点, 一些预先训练好的模型, 比如batch normalization和dropout, 将不会产生有意义的答案, 这仅仅是因为它们内部的工作方式 。 现在eval已经设置好了, 我们可以进行推断了:




刚刚发生了一组惊人的操作, 涉及4450万个参数, 生成了1000个分数的向量, 每个ImageNet类一个 。 这是不是并没有花多少时间?


我们现在需要找出获得最高分数的分类的标签 。 这将告诉我们模型在图像中看到了什么 。 如果标签与人类对图像的描述匹配, 那就太好了!这意味着一切正常 。 如果不是, 那么要么是训练过程中出了问题, 要么是图像与模型期望的相差太大, 以致模型无法正确处理, 或者是存在其他类似的问题 。


为了查看预测标签的列表, 我们将加载一个文本文件, 按照标签在训练期间呈现给网络的相同顺序列出标签, 然后我们将在产生网络最高分数的索引处挑选标签 。 几乎所有用于图像识别的模型都以类似于我们将要处理的形式输出 。


让我们加载包含ImageNet数据集类的1000个标签的文件:


在这一点上, 我们需要确定对应于我们先前获得的out张量中的最大得分的索引 。 我们可以使用PyTorch中的max函数来实现, 它输出张量中的最大值以及出现最大值的索引:


我们现在可以使用索引来访问标签 。 这里, index不是一个简单的Python数字, 而是一个单元素一维张量(具体来说, 就是张量([207]), 所以我们需要使用index[0]将实际的数值作为索引放入标签列表中 。 我们还使用torch.nn.functional.softmax(http://mng.bz/BYnq)将输出标准化为[0, 1]的范围, 然后除以它们的和 。 这给了我们一些大致类似于模型对其预测的信心 。 在这种情况下, 模型有96%的把握知道它看到的是一只金毛猎犬:


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。