Deep-Learning-with-PyTorch

Deep-Learning-with-PyTorch-2.1.4

2020-08-14  本文已影响0人  追求科技的足球

2.1.4 准备,设定,即将运行

好,我们刚得到什么? 出于好奇,我们将窥视resnet101的外观。 我们可以通过打印返回模型的值来做到这一点。 这为我们提供了与2.3中看到的相同类型信息的文本表示,提供了有关网络结构的详细信息。 目前,这超出了我的信息范围,但是随着本书的进展,我们将增强理解此代码的能力:

# In[5]:
resnet

# Out[5]:
ResNet(
       (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3),bias=False)
       (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True,track_running_stats=True)
       (relu): ReLU(inplace)(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1,ceil_mode=False)
       (layer1): Sequential((0): Bottleneck(
           ...
           )
       )
       (avgpool): AvgPool2d(kernel_size=7, stride=1, padding=0)
       (fc): Linear(in_features=2048, out_features=1000, bias=True)
)

我们在这里看到的是模块,每行一个。 请注意,它们与Python模块没有任何共同点:它们是单独的操作,是神经网络的构建块。 它们在其他深度学习框架中也称为层。

如果向下滚动,我们会看到很多Bottleneck模块一个接一个地重复(其中有101个!),其中包含卷积和其他模块。 这就是典型的用于计算机视觉的深层神经网络的解剖结构:过滤器和非线性函数或多或少的顺序级联,最后以(fc)层为1,000个输出类(out_features)产生得分。

resnet变量可以像函数一样调用,将一个或多个图像作为输入,并为1,000个ImageNet类中的每一个产生相等数量的分数。 但是,在执行此操作之前,我们必须对输入图像进行预处理,以使其具有正确的大小,并使它们的值(颜色)大致位于相同的数值范围内。 为此,torchvision模块提供了转换,使我们能够快速定义基本预处理功能的管道:

# In[6]:
from torchvision import transforms
preprocess = transforms.Compose([
   transforms.Resize(256),
   transforms.CenterCrop(224),
   transforms.ToTensor(),
   transforms.Normalize(
       mean=[0.485, 0.456, 0.406],
       std=[0.229, 0.224, 0.225]
       )])

在这种情况下,我们定义了一个预处理功能,它将输入图像缩放为256×256,将图像裁剪到中心周围为224×224,并将其转换为张量(PyTorch多维数组:在这种情况下,使用具有颜色,高度和宽度的3D数组,并对其RGB(红色,绿色,蓝色)分量进行规格化,以便它们具有均值和标准差。 如果我们希望网络产生有意义的答案,则需要与训练期间向网络提供的内容相匹配。 当我们在7.1.3节中深入研究制作自己的图像识别模型时,将对转换进行更深入的研究。

现在,我们可以获取我们最喜欢的狗的图片(例如,来自GitHub存储库的bobby.jpg),对其进行预处理,然后查看ResNet对它的看法。 我们可以使用Pillow(https://pillow.readthedocs.io/en/stable)从本地文件系统加载图像开始,Pillow是Python的图像处理模块:

# In[7]:
from PIL import Image
img = Image.open("../data/p1ch2/bobby.jpg")

如果我们从Jupyter Notebook进行跟踪,则将执行以下操作以在线查看图片(将在以下位置显示<PIL.JpegImagePlugin ...的位置):

# In[8]:
img
# Out[8]:
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1280x720 at0x1B1601360B8>

另外,我们可以调用show方法,该方法将弹出带有查看器的窗口,以查看图2.4中所示的图像:

>>> img.show()
图2.4 Bobby,我们非常特别的输入图片

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

# In[9]:
img_t = preprocess(img)

然后,我们可以按照网络期望的方式重塑,裁剪和归一化输入张量。 在接下来的两章中,我们将更多地了解这一点。 抓住现在:

# In[10]:
import torch
batch_t = torch.unsqueeze(img_t, 0)

现在,我们准备好运行模型了。

上一篇 下一篇

猜你喜欢

热点阅读