Pytorch:Tensor 张量的概念及张量的各种创建
Tensor 概念
张量的数学概念:
张量是一个多维数组,它是标量、向量、矩阵的高位扩展
张量在pytorch中的概念:
tensor之前是和pytorch早期版本中的variable一起使用的。
variable是torch.autograd的数据类型,主要用于封装tensor,进行自动求导
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否是叶子结点(张量)
而从pytorch 0.4.0版本开始,variable并入了Tensor,并添加了额外三个属性:
dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在设备,CPU/GPU,是加速的关键
pytorch的八个属性中,前四个和数据相关,后四个与梯度求导有关
pytorch的数据类型有包括以下几种的16种类型,最常用的为画红框的两种,第二个会在计算交叉熵的时候用到
张量的创建
方式一:直接创建
1.1 torch.tensor()
功能:从data创建tensor
data:数据,可以是list,numpy
dtype:数据类型,默认与data的一致
device:所在设备,cuda/cpu
requires_grad:是否需要梯度
pin_memory:是否存于锁页内存
1.2 torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动
方式二:依据数值创建
2.1 torch.zeros()
功能:依size创建全0张量
size:张量的形状,如(3,3)、(3,224,224)
out:输出的张量(可以赋给另一个张量值)
layout:内存中布局形式,有strided,sparse_coo(创建稀疏张量时才用到)等
device:所在设备,cuda/cpu
requires_grad:是否需要梯度
2.2 torch.zeros_like()
功能:依input形状创建全0张量
input:创建与input同形状的全0张量
dtype:数据类型
layout:内存中布局形式
device:所在设备,cuda/cpu
requires_grad:是否需要梯度
2.3 torch.ones()
功能:依size创建全1张量
其他参数与上述的全0张量创建类似
2.4 torch.ones_like()
功能:依input形状创建全1张量
同理类似
2.5 torch.full()
功能:依size创建各元素值相同的张量
主要参数:
size:张量的形状,如(3,3)
fill_value:张量的值
2.6 torch.full_like()
功能:依input形状创建各元素值相同的张量
同理类似
2.7 torch.arange() (注意只有一个r字母)
功能:创建等差的一维张量
注意事项:数值区间为[start,end)
start:数列起始值
end:数列“结束值”(取不到)
step:数列公差,默认为1
2.8 torch.linspace()
功能:创建均分的一维张量
注意事项:数值区间为[start,end]
start:数列起始值
end:数列结束值(取的到)
steps:数列长度
2.9 torch.logspace()
功能:创建对数均分的一维张量
注意事项:数值区间为[start,end]
start:数列起始值
end:数列结束值
steps:数列长度
base:对数函数的底,默认为10
2.10 torch.eye()
功能:创建单位对角矩阵(二维张量)
注意事项:默认为方阵
n:矩阵行数
m:矩阵列数
方式三:依概率分布创建
3.1 torch.normal()
功能:生成正态分布(高斯分布)的采样值
mean:均值
std:方差
当mean和std为标量或张量时,各有不同的情况
mean为标量, std为标量:需额外指定一个size,根据size数采样两个参数指定的正态分布数
mean为标量, std为张量 或 mean为张量, std为标量:为标量的参数分别都分配到张量参数的元素中形成各自的正态分布并给出采样值
mean为张量, std为张量:
此时两个参数张量长度应相等,各生成下标相同对应的正态分布采样数组
3.2 torch.randn()
3.3 torch.randn_like()
功能:生成标准正态分布
size:张量的形状
3.4 torch.rand()
3.5 torch.rand_like()
功能:在区间[0,1)上,生成均匀分布
3.6 torch.randint()
3.7 torch.randint_like()
功能:在区间[low,high)上,生成整数均匀分布
size:张量的形状
3.8 torch.randperm()
功能:生成从0到n-1的随机排列
n:张量的长度
3.9 torch.bernoulli()
功能:以input为概率,生成伯努利分布(0-1分布,两点分布)
input:概率值