参考:
《深度学习框架Pytorch:入门与实践》(陈云)
《深度学习入门之PyTorch》(廖星宇)
《深度学习之PyTorch实战计算机视觉 (2)》
PyTorch官方教程
import torch as t
Tensor
- Tensor是PyTorch 中里要的数据结构,可认为是一个高维数组。
- 它可以是一个数(标量)、一维数组(向量)、 二维数组(矩阵)或更离维的数组。
- Tenso 和 numpy的 ndarrays类似,但Tensor可以使用GPU加速。
- Tensor的使用和 numpy及MATLAB的接口十分相似。
- Tensor和numpy对象共享内存,转换很快几乎不需要消耗资源,其中一个变了,另外一个也随之改变
- torch.Size是tuple对象的子类,因 此它支持tuple的所有操作
- 函数名后面带下画线的函数会修改Tensor本身
x=t.Tensor(m,n) #创建一个m×n的矩阵,分配空间,未初始化
x=t.rand(m,n) #使用[0,1]随机初始化二维数组
print(x.size()) #查看x的形状
x.size()[1]
x.size(1) #同上
x[:,1] #取一列
#-----------------------------加法--------------------------------
x+y
t.add(x,y)
result=t.Tensor(n,m) #预先分配
t.add(x,y,out=result)
y.add(x) #y没有改变
y.add_(x) #inplace加法,y变了
#-----------------------------转换------------------------------
a=t.ones(n) #新建了一列n行全是1的Tensor
b=a.numpy() #Tensor->Numpy
a=np.ones(5)
b=t.from_numpy(a) #Numpy->Tensor
if t.cuda.is_available():
x=x.cuda() #Tensor可通过.cuda方法转化为GPU的Tensor,从而享受加速运算
Autograd
深度学习算法本质上是通过反向传播求导数。
Autograd可以为Tensor上的操作自动微分,核心类是autograd.Variable,简单封装了Tensor, 并支持几乎所有Tensor的操作。
Tensor在被封装为Variable之后,可以调用它的 . backward实现反向传播,自动计算所有梯度。
Variable主要包含三个属性:
- data:保存Variable所包含的Tensor
- grad:保存data对应的梯度, grad也是个Variable, 而不是Tensor, 它和data的形状—样。
- grad_fn : 指向一个Functio n对象,这个Function用来反向传播计算输入的梯度
x=Variable(t.ones(2,2), requires_grad=True)
y=x.sum() #4
未完待续