Pytorch框架学习笔记
一、张量的创建
Code is Power!
✍此系列文章为Pytorch框架学习笔记。
目录
Tensor概念
张量是一个多维数组,是标量、向量、矩阵的高维拓展。
Tensor与Variable
Variable是torch.autograd
中的数据类型。主要用于封装Tensor,进行自动求导。
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,是加速的关键
Torch的数据类型:
Data type |
dtype |
CPU tensor |
GPU tensor |
---|---|---|---|
32-bit floating point |
|
|
|
64-bit floating point |
|
|
|
16-bit floating point |
|
|
|
8-bit integer (unsigned) |
|
|
|
8-bit integer (signed) |
|
|
|
16-bit integer (signed) |
|
|
|
32-bit integer (signed) |
|
|
|
64-bit integer (signed) |
|
|
|
Boolean |
|
|
其中用的比较多的有torch.float
,卷积层的权值,数据预处理后都默认为torch.float
; torch.long
,图像的标签和交叉熵的损失函数一般都用的torch.long
。
Tensor 创建的三种方式
直接创建
- torch.tensor()
data
: 数据,可以是list, numpy
dtype
: 数据类型,默认与data的一致。
device
: 所在设备
requires_grad
: 是否需要梯度
pin_memory
: 是否存于锁页内存。一般设置为False
- torch.from_numpy(ndarray)
需要注意的是从torch.from_numpy创建的tensor与原ndarray共享内存。
依据数值创建
全零填充:
- torch.zeros()
size
: 张量大小
out
: 输出张量
layout
: 内存布局
device
: 设备
requires_grad
: 是否需要计算梯度
- torch.zeros_like()
input
: 创建与input同形状的全零张量
dtype
: 数据类型
layout
: 内存布局,稀疏或者稠密
此外,还有创建全一,自定义填充的张量:
-
torch.ones()
-
torch.ones_like()
-
torch.full()
-
torch.full_like()
创建等差张量:
- torch.arrange()
start
: 起始
end
: 终止, 左闭右开
step
: 步长
- torch.linspace()
start
: 起始
end
: 终止
steps
: 一维张量长
创建对数均分数列:
- torch.logspace()
start
: 起始
end
: 终止
steps
: 一维张量长
base
: 对数函数的底,默认为10
创建对角矩阵:
- torch.eye()
n
: 矩阵函数
m
: 矩阵列数
依据概率创建
正态分布:
- torch.normal()
mean
: 均值
std:
标准差
size
: 指定输出张量的大小,在mean和std均为标量时,需要指出。
out
: 输出张量
- torch.randn() 标准正态分布
- torch.randn_like()
均匀分布:
- torch.rand() 零到一上采样,指定size
- torch.randn_like()
- torch.randint() 在指定区间上采样,指定size
- torch.randint_like()
生成0到n-1的随机排列,用以生成随机索引:
- torch.randperm() 错排
n
: 张量的长度
伯努利分布:
- torch.bernoulli()
p
: 概率值