再想要快速测试一个想法时,固然我们已经有 Pytorch 可以帮我们快速一层一层地搭建一个可以跑得模型,但这个仍然不是一个非常快速的选择,若是我们今天想要使用一个有 152 层的 ResNet152 的话,傻傻的一层一层打不是要很久QQ 我们未来其实会去介绍如何使用一些技巧去写这样的结构,但目前的我们还没有这样的能力。
另外举个实际例子,若我们要训练一个蛮深的深度学习网路像是 Resnet-152 , dataset 用 ImageNet 来 Training, 想要 train 到像是 paper 或者网路上宣称的准度,如果你试用一般家用主机上的 GPU train 的话,你怕是把显卡烧了或者 AMD 都 Yes 了一段时间都还 Train 不完QQ
那难道要这样直接开始打吗?在此请冷静,我们可以快速地使用一个很有用的官方 Library Torchvision 去使用一些常见的 Model,甚至,一些常见的 Dataset 或者 Data Argumentation 的方法都可以配我们这样快速使用喔!!
Torchvision 是一个 Pytorch 官方维护的资源库,里面主要收录三大类资源:
pip install torchvision
一些document跟各别function或者提供的内容可见官网
好啦我知道你们碗真的要敲破了XDDD难得的来写一下基本的使用情况吧。我分成4步来示范一下使用 Torchvision 大概会长啥样:
在安装完或者已经有现成的环境中,我这边以开启 Colab 做示范, 使用下方程序码来引入 Pytorch 跟 Torchvision :
import torch
import torchvision
接下来按下执行没有报错基本上就是有成功引入,当然我们也可以藉由查询版本的方式再一次确认真的有抓到:
torch.__version__
torchvision.__version__
执行完的结果如下:
在 Torchvision 上有非常多的Dataset可以使用详可见官网连结,那我们今天举个最简单的例子"Cifar 10"来给大家看看,这是一个小小的dataset,每张照片为32 X 32 RGB照片并且有相对应的 Label,我们以官网的tutorial来说明:
0. Import 必须资料库
import torch
import torchvision
import torchvision.transforms as transforms
1.使用下面指令可以下载Cifar 10 的Training dataset 以及 Testing dataset
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
画面会长成这样:
2.使用 Dataloder 读进这些 dataset 并加上 label
Dataloder是用来读这些dataset的工具,目前我们先使用 pytorch 本身的dataloder即可,我们若有空会在实务篇讲解一下dataloder内部细节以及如何自订义 dataloder来读自己的dataset
预先打 transform 的形式,这个用来把dataset做转换,这边只是先转换成 Tensor 的型态
transform = transforms.Compose(
[transforms.ToTensor()])
先打 Tarining 跟 Testing dataset 的 dataloder
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
接者加入label 种类
classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
3.我们让dataset 显示
使用 matplot 来显示:
import matplotlib.pyplot as plt
import numpy as np
# functions to show an image
def imshow(img):
img = img / 2 + 0.5 # unnormalize
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1, 2, 0)))
plt.show()
# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()
# show images
imshow(torchvision.utils.make_grid(images))
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))
并可以得到以下结果:
如上节所看到的,我们可以藉由设置 "transform" 来设定我们想对 dataset做甚麽多的处理
例如:
transform = transforms.Compose(
[transforms.ToTensor(),
transform.Translation(),
transforms.RandomHorizontalFlip(p=0.5)
])
我们可以得到类似以下效果:
这个我们下一章会再讲,但现在可以先给大家看看效果:
1.导入 torchvision 中的 models
import torchvision.models as models
2.雕选自己想要的 Pretrain model,这里以 Renet 18 当例子:
resnet18 = models.resnet18(pretrained = True)
3.印出来看看是否成功导入model
print(resnet18)
没错的话应该会长以下画面:
Torchvision 是一个十分好用且资源丰富的资源库,日後可以各种多方尝试看看各个功能!!
>>: Day11 - 物理模拟篇 - 弹跳球世界II - 成为Canvas Ninja ~ 理解2D渲染的精髓
我好像找到之前明明有连接到并且取得资料後,结果却为空值的因素了! 不过这只是我觉得而已,我也不是很确...
前言 铁人赛进入第十八天,今天原本是要开始讲网页前端的部分 没想到碰到自己挖的坑...所以这篇变成踩...
在部署基於容器的应用程序时,我们可以使用容器编排器来配置和管理容器。这意味着变更请求已获批准和实施,...
影片Vue01 1.Vue (Part_1 > Lab_HelloVueJS > hel...
游戏示意 swift - 游戏功能 接下来当我们点击按钮 我们来打个API 并告知道有没有猜对 来看...