张量的创建
张量
张量的定义
张量是一个多维数组,它是标量、向量、矩阵的高维拓展。
特殊的张量:
- 标量——0维张量
- 向量——1维张量
- 矩阵——2维张量
Tensor与Variable
Variable是torch.autograd中的数据类型主要用于封装Tensor,进行自动求导。
Variable的属性有:
- data:被包装的Tensor
- grad:data的梯度
- grad_fn: 创建Tensor的Function,是自动求导的关键
- requires_grad:指示是否需要梯度
- is_leaf:指示是否是叶子结点(张量)
Tensor:从PyTorch0.4.0版本开始,Variable并入Tensor中。
Tensor除了拥有Variable的属性外,还有:
- dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
- shape:张量的形状,如:(64,3,224,224)
- device:张量所在设备,GPU/CPU,是借宿的关键
张量的创建
1.直接创建
torch.tensor()
torch.tensor(
data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False
)
功能:从data创建tensor
- data:数据,可以是list,numpy
- dtype:数据类型,默认与data的一致
- device:所在的设备,cuda/cpu
- requires_grad:是否需要梯度
- pin_memory:是否存于锁业内存
torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意:从torch.from_numpy创建的Tensor与原ndarray共享内存,当修改其中一个数据,另外一个也将会被改动。
2.依据数值创建
torch.zeros()
torch.zeros(
size,
out=None,
dtype=None,
layout=torch,strided
device=None
requires_grad=False)
功能:依size创建全0张量
- size:张量的形状,如(3,3)、(3,224,224)
- out:输出的张量
- layout:内存中的布局形式,有strided,sparse_coo(数据为稀疏矩阵时才使用)
- device:所在的设备,gpu/cpu
- requires_grad:是否需要梯度
torch.zeros_like()
torch.zeros_like(
input_data,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:依据input_data的形状创建全0张量
- input_data:创建与input同形状的全0张量
- dtype:数据类型
- layout:内存中的布局形式
torch.ones()
功能同torch.zeros,不同之处在于创建的为全1张量
torch.ones_like()
功能同torch.zeros_like(),不同点在于创建全1张量
torch.full()
torch.full(
size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
requires_grad=False)
功能:依据size输入的形状,创建值全为fill_value的张量
torch.full_like()
功能与torch.zeros_like类似,填充某个值
torch.arange()
torch.arange(
start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:创建等差的1维张量
注意事项:数值区间为[start,end)左开右闭
- start:数列起始值
- end:数列结束值(取不到)
- step:数列的公差,默认为1
torch.linspace()
torch.linspace(
start,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:创建均分的1维张量
注意事项:数值区间为[start,end] (全部能取到)
- start:数列起始值
- end:数列结束值
- steps:数列长度(数列中元素的个数)
torch.logspace()
torch.logspace(
start,
end,
steps=100,
base=10.0,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:创建对数均分的1维张量
注意事项:长度为steps,底数为base
- start:数列起始值
- end:数列结束值
- steps:数列长度(数列中元素的个数)
- base:对数函数的底数,默认值为10.0
torch.eye()
torch.eye(
n,
m=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能:创建单位对角矩阵(2维张量)
注意:默认为方阵
- n:矩阵行数
- m:矩阵列数
依据概率分布
torch.normal()
torch.normal(mean,std,out=None)
功能:生成正态分布(高斯分布)
- mean:均值
- std:标准差
四种模式:
- mean为标量,std为标量
- mean为标量,std为张量
- mean为张量,std为标量
- mean为张量,std为张量
torch.randn()
功能,生成标准正态分布,大小为size。功能类似torch.zeros()
torch.randn_like()
功能:生成标准正态分布,大小为input_data的size
torch.rand()
torch.rand_like()
在区间[0,1)上生成均匀分布
torch.randint()
torch.randint(
low=0,
high,
size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
torch.randint_like()
在区间[low,high)生成整数均匀分布的size大小的张量
size:张量的形状
torch.randprem()
torch.randperm(
n,
out=None,
dtype=torch.int64,
layout=torch.strided,
device=None,
requires_grad=False)
功能:生成从0到n-1的随机排列
n:张量的长度
torch.bernoulli()
torch.bernoulli(
input,
*,
generator=None,
out=None)
功能:以input为概率,生成伯努利分布