张量的概念

张量是什么

张量是一个多维数组,它是标量、向量、矩阵的高维拓展
image.png
**

Tensor与Variable

Pytorch0.4.0版本之前
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导image.png
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否是叶子节点(张量)

从0.4.0版开始,Variable并入Tensor
image.png
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:是否存于锁页内存
image.png

2. torch.from_numpy(ndarray)

功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据时,另外一个也会被改动。image.png

二、依据数值创建

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:是否需要梯度;
image.png

2. torch.zeros_like()

功能:根据input形状创建全0张量
input:创建与input同形状的全0张量;
dtype:数据类型;
layout:内存中布局形式
image.png

3. torch.ones()

4. torch.ones_like()

功能:根据input形状创建全1张量

5. torch.full()

功能:根据size创建自定义数值的张量
size:张量的形状,如(3,3)
fill_value:张量的值
image.png

6. torch.full_like()

7. torch.arrange()

功能:创建等差的1维张量
注意事项:数值区间为 [start, end) 左闭右开
start:数列起始值
end:数列结束值(不包括)
step:数列公差,默认为1
image.png

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:
image.png
否则为:
image.png
此时输出的值的size与mean或std一样

2. torch.randn()

image.png

3. torch.randn_like()

功能:生成标准正态分布,均值为0,标准差为1
size:张量的形状

4. torch.rand()

功能:在区间 [0,1)上,生成均匀分布;

5. torch.rand_like()

6. torch.randint()

功能:在区间 [low,height)生成整数均匀分布

7. torch.randint_like()

8. torch.randperm()

功能:生成从0到n-1的随机排列
n:张量的长度
image.png

9. torch.bernoulli()

功能:以input为概率,生成bernoulli分布(0-1分布,两点分布)
input:概率值
image.png