张量的概念
张量是什么
Tensor与Variable
Pytorch0.4.0版本之前
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否是叶子节点(张量)
从0.4.0版开始,Variable并入Tensor
dtype:张量的数据类型,如 torch.FloatTensor, torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在的设备,GPU/CPU,是加速的关键
张量的创建
一、直接创建
1. torch.tensor()
功能:从data创建tensor
data:数据,可以是list,numpy;
dtype:数据类型,默认与data类型一致;
device:所在设备,cuda/cpu;
requires_grad:是否需要梯度;
pin_memory:是否存于锁页内存
2. torch.from_numpy(ndarray)
功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据时,另外一个也会被改动。
二、依据数值创建
1. torch.zeros()
功能:根据size创建全0张量
size:张量的形状,如(3,3)、(3,244,244);
out:输出的张量;eg. t = torch.zeros((3,3), out=out_t) 将创建的张量赋值给out_t,t == out_t)
layout: 内存中布局形式,有strided,sparse_coo等,默认为strided,当为稀疏张量时使用后者可以提高读取 速度
device:所在设备,cpu/gpu;
requires_grad:是否需要梯度;
2. torch.zeros_like()
功能:根据input形状创建全0张量
input:创建与input同形状的全0张量;
dtype:数据类型;
layout:内存中布局形式
3. torch.ones()
4. torch.ones_like()
5. torch.full()
功能:根据size创建自定义数值的张量
size:张量的形状,如(3,3)
fill_value:张量的值
6. torch.full_like()
7. torch.arrange()
功能:创建等差的1维张量
注意事项:数值区间为 [start, end) 左闭右开
start:数列起始值
end:数列结束值(不包括)
step:数列公差,默认为1
8. torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间为 [start, end] 左闭右闭
start:数列起始值
end:数列结束值(包括)
steps:数列长度
9. torch.logspace()
功能:创建对数均分的1维张量
start:数列起始值
end:数列结束值(包括)
steps:数列长度
base:对数函数的底,默认为10
10. torch.eye()
功能:创建单位对角矩阵(2维张量)
注意事项:默认为方阵
n:矩阵行数
m:矩阵列数(一般不用定义,因为通常使用方阵)
三、依概率分布创建张量
1. torch.normal()
功能:生成正态分布(高斯分布)
mean:均值
std:标准差
该方法有四种模式,即mean为张量或标量,std为张量或标量;
当mean和std都为标量时,定义增加一个size参数,设定张量的size:
否则为:
此时输出的值的size与mean或std一样
2. torch.randn()
3. torch.randn_like()
功能:生成标准正态分布,均值为0,标准差为1
size:张量的形状
4. torch.rand()
5. torch.rand_like()
6. torch.randint()
7. torch.randint_like()
8. torch.randperm()
9. torch.bernoulli()
功能:以input为概率,生成bernoulli分布(0-1分布,两点分布)
input:概率值