使用Pytorch进行深度学习,60分钟闪电战
本次课程的目标:
- 从更高水平理解Pytorch的Tensor(张量)和神经网络
- 训练一个小的图像分类神经网络
注意确定已经安装了torch和torchvision
什么是Pytorch
Pytorch是一个针对两类受众的科学计算包
- Numpy替代,可以使用GPU
- 深度学习研究平台,提供灵活性和速度
开始
Tensors(张量)
张量和Numpy的ndarrays类似,此外,张量还可以应用于GPU加速计算。以下是几个常用的方法
生成一个(5,3)的0张量和一个(5,3)的随机张量
from __future__ import print_function
import torch
x = torch.empty(5, 3)
print('x=',x)
y = torch.rand(5, 3)
print('y=',y)
x= tensor(1.00000e-43 *
[[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 7.3989, 0.0000],
[ 0.0000, 0.0000, 0.0000]])
y= tensor([[ 0.9796, 0.0775, 0.3972],
[ 0.5790, 0.8416, 0.7846],
[ 0.8820, 0.8076, 0.9701],
[ 0.6431, 0.1062, 0.0848],
[ 0.0472, 0.7201, 0.4488]])
生成shape为(5,3),由0填充,类型为long的张量
a= torch.zeros(5,3,dtype=torch.long)
print('a=',a)
a= tensor([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])
直接从数据构建张量
# b=torch.tensor([5.6,3])
b=torch.tensor(5.6)
print('b=',b)
获取张量的大小,注意size()生成的是一个tuple类型数据,支持所有tuple操作。
size= x.size()
print(size)
张量的运算,可以直接相加,也可以使用torch.add()等方法。
需要resize和reshape张量的时候,可以使用torch.view()
c=torch.randn(4,4)
d=c.view(16)
e=c.view(-1,8)
print(c.size(),d.size(),e.size())
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
如果有一个元素张量,使用.item()可以将值作为Python数字
x=torch.randn(1)
print(x)
print(x.item())
tensor([-0.9725])
-0.9725168943405151
Numpy桥
将一个Torch的张量转为Numpy的array,同理也可以转回来。torch张量和Numpy的array共享同一个记忆地址,改变一个就会改变另一个。
h=torch.ones(5)
print(h)
i=h.numpy()
print(i)
tensor([ 1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]
CUDA张量
张量可以移动到任何硬件,通过使用.to方法
if torch.cuda.is_available():
device = torch.device("cuda") # a CUDA device object
y = torch.ones_like(x, device=device) # directly create a tensor on GPU
x = x.to(device) # or just use strings ``.to("cuda")``
z = x + y
print(z)
print(z.to("cpu", torch.double))
x= tensor([[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.1691, 0.0000]])
y= tensor([[ 0.5423, 0.4364, 0.6140],
[ 0.9988, 0.3274, 0.4991],
[ 0.1386, 0.8057, 0.3958],
[ 0.4735, 0.1752, 0.5884],
[ 0.8408, 0.0302, 0.3169]])
a= tensor([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])