赞
踩
ImageNet数据集是由一个Stanford大学维护的包含1400多万幅图像的非常大的数据集,所有的图像都用来自WordNet数据集的名词层次结构标记,而WordNet数据集又是一个大型的英语词汇数据库。
from torchvision import models
可以看到很多实际的模型
与先进的深度网络相比,AlexNet是一个非常小的模型,但是,它可以让我们初步学习神经网络处理计算机视觉任务的例子。
我们首先创建一个AlexNet对象,接下来利用resnet101来初始化一个具有101层的卷积神经网络,下载需要一定的时间,resnet101有4450万个参数需要自动优化。
再次运行resnet来查看这些层的形式
我们可以像调用函数一样调用resnet变量,将图片作为输入。在此之前需要将我们输入的图片进行预处理使其大小正确、颜色处在相同的数值范围。TorchVision模块提供了转换的操作,允许我们快速的定义基本的预处理管道。
- 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]
- )])
接下来我们导入图片
- from PIL import Image
- img = Image.open("bobby.jpg")
- img
也可以使用img.show()使用一个窗口来进行查看
接下来通过预处理管道传递图像,按照网络预期的方式对输入的张量进行重塑、裁剪和归一化处理
- img_t = preprocess(img)
- import torch
- batch_t = torch.unsqueeze(img_t, 0)
接下来运行模型。首先将网络设置为eval模式,这种过程被称之为推理。如果不这样做的话,那么一些预先训练过的模型,如批归一化和Dropout将不会产生有意义的答案。
- torch.set_printoptions(precision=4,sci_mode=False)
- out = resnet(batch_t)
- out
加载标签文件,并进行匹配:
- with open('imagenet_classes.txt') as f:
- labels = [line.strip() for line in f.readlines()]
-
- _, index = torch.max(out, 1)
接下来输出结果和置信度,以及前五个比较大的预测结果:
- percentage = torch.nn.functional.softmax(out, dim=1)[0] * 100
- labels[index[0]], percentage[index[0]].item()
- _,indices = torch.sort(out, descending=True)
- [(labels[idx], percentage[idx].item()) for idx in indices[0][:5]]
可以看到,预测结果为一只金毛猎犬。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。