张量的创建
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: 概率值

浙公网安备 33010602011771号