张量是什么
张量是一个多维数组,它是标量、向量、矩阵的高维拓展
张量与Variable
Variable已经并入tensor
Variable是给张量添加属性
Variable是torch.autograd中的数据类型
主要用于封装Tensor,使Tensor进行自动求导
Variable有5个属性
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否是叶子结点(张量)
PyTorch0.4.0版开始,Variable并入Tensor
dtype:张量的数据类型,如 torch.FloatTensor,torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在设备,GPU/CPU,是加速的关键
Tensor的创建
创建一:直接创建
torch.tensor()
功能:从data创建tensor
data:数据,可以是list,numpy
dtype:数据类型,默认与data的一致
device:所在设备,cuda/cpu
requires_grad:是否需要梯度
pin_memory:是否存于锁页内存
flag = True
#flag = False
if flag:
arr = np.ones((3,3))
print("ndarray的数据类型:",arr.dtype)
#t = torch.tensor(arr,device='cuda')
t = torch.tehsor(arr)
print(t)
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:所在设备,gpu/cpu
requires_grad:是否需要梯度
2.2 torch.zeros_like()
功能:依input形状创建全0张量
intput:创建与input同形状的全0张量
dtype:数据类型
layout:内存中布局形式
2.3 torch.ones()
2.4 torch.ones_like()
功能:依input形状创建全1张量
size:张量的形状,如(3,3)、(3,224,224)
dtype:数据类型
layout:内存中布局形式
device:所在设备,gpu/cpu requires_grad:是否需要梯度
2.5 torch.full()
2.6 torch.full_like()
功能:依input形状创建全0张量
size:张量的形状,如(3,3)
fill_value:张量的值
2.7 torch.arange()
功能:创建等差的1维张量
注意事项:数值区间为[ start,end)
start:数列起始值
end:数列“结束值”
step:数列公差,默认为1
2.8 torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间为[start,end]
start:数列起始值
end:数列结束值
steps:数列长度(注意不是步长)
2.9 torch.logspace()
功能:创建对数均分的1维张量
注意事项:长度为steps,底为base
start:数列起始值
end:数列结束值
steps:数列长度
base:对数函数的底,默认为10
2.10 torch.eye()
功能:创建单位对角矩阵(2维张量)
注意事项:默认为方阵
n:矩阵行数
m:矩阵列数
创建三:依据概率创建
3.1 torch.normal()
功能:生成正态分布(高斯分布)
mean:均值
std:标准差
四种模式:
mean为标量,std为标量
mean为标量,std为张量
mean为张量,std为标量
mean为张量,std为张量
区别是标量中要加一个size
3.2 torch.randn()
3.3 torch.randn_like()
功能:生成标准正态分布(均值为0,标准差为1)
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:概率值