【Week1】张量
张量是什么
张量是一个多维数组,是标量、向量、矩阵的高维拓展。标量是没有方向的。
Variable是torch.autograd中的数据类型,主要用于对Tensor封装,进行自动求导,对Tensor进行属性添加。
Variable 的五个属性:
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的Function,是自动求导的关键。
requires_grad:指是否需要梯度
is_leaaf: 指是否是叶子节点(张量)
从pytorch 0.4开始,Variable并入Tensor,新加入了三个属性:
dtype:张量的数据类型,例如torch.FloatTensor,torch.cuda.FloatTensor
注:CV中常用到的数据类型 torch.float32、torch.long(图像标签常用)
shape:张量的形状,如(6,3,224,224)
device:张量所在设备,GPU/CPU,是加速的关键
张量的创建
一、直接创建
torch.tensor()
功能:从data创建tensor
参数:
- data:数据,可以是list,numpy
- dtype:数据类型,默认与data的一致
- device:所在设备
- requires_grad:是否需要内存
- pin_memory:是否存于锁页内存
torch.from_numpy(ndarray)
功能:从numpy创建tensor
**注:**从torch.from_numpy创建的tensor和原来的ndarray是共享内存的。
二、依据数值创建
torch.zeros()
功能:根据size创建全零张量
参数:
- size :张量的形状,(3,3)、(3,224,224)
- out:输出的张量
- layout :内存中的布局形式,默认是strided,sparse_coo是表示一个稀疏矩阵
- device:所在设备,gpu/cpu
- requires_grad:是否需要梯度
torch.zeros_like()
功能:创建和input形状一样的全0张量
参数:
- input:创建与input同形状的全0张量
- dtype:数据类型
- layout:内存中的布局形式
注:torch.ones()和torch.ones_like()与zeros相近
torch.full()和torch.full_like()
功能:依input形状创建指定数据的张量
- size:张量的形状,如(3,3)
- fill_value:张量的值
torch.arrange()
功能:创建等差的1维张量
注:数值区间为[star,end)
- start:数列的起始值
- end:数列的“结束值”
- step:数列公差,默认为1
torch.linsapce()
功能:创建均分的1维张量
注:数值区间为[star,end),数列间隔为:(end-start)/(step-1)
- start:数列的起始值
- end:数列的“结束值”
- step:数列长度
torch.logspace()
功能:创建对数均分的1维张量
注:长度为steps,底为base
- start:数列的起始值
- end:数列的结束值
- steps:数列长度
- base:对数函数的底,默认为10
torch.eye()
功能:创建单位对角矩阵(2维张量)
注意事项:默认为方正,只用传一个参数
- n:矩阵行数
- m:矩阵列数
三、依概率分布的创建张量
torch.normal()
功能:生成正态分布(高斯分布)
- mean:均值
- std:标准差
四种模式:
mean为标量,std为标量 增加一个参数size,torch.normal(0,1,size=(4,))
当都为标量的时候,size是一个元组类型。
mean为标量,std为张量
mean为张量,std为标量
mean为张量,mean为张量 结果也是张量
torch.randn_like()和torch.randn()
功能:生成标准整态正态分布
- size:张量的形状
torch.rand()
torch.rand_like()
功能:在区间[0,1)上,生成均匀分布
torch.randint()
torch.randint_like()
功能:区间[low,high)生成整数均匀分布
- size:张量的形状
torch.randperm()
功能:生成从0到n-1的随机排列
- n:张量的长度
torch.bernoulli()
功能:以input为概率,生成伯努力分布(0-1分布,两点分布)
- input:概率值