张量的创建

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

torch.float32 or torch.float

torch.FloatTensor

torch.cuda.FloatTensor

64-bit floating point

torch.float64 or torch.double

torch.DoubleTensor

torch.cuda.DoubleTensor

16-bit floating point

torch.float16 or torch.half

torch.HalfTensor

torch.cuda.HalfTensor

8-bit integer (unsigned)

torch.uint8

torch.ByteTensor

torch.cuda.ByteTensor

8-bit integer (signed)

torch.int8

torch.CharTensor

torch.cuda.CharTensor

16-bit integer (signed)

torch.int16 or torch.short

torch.ShortTensor

torch.cuda.ShortTensor

32-bit integer (signed)

torch.int32 or torch.int

torch.IntTensor

torch.cuda.IntTensor

64-bit integer (signed)

torch.int64 or torch.long

torch.LongTensor

torch.cuda.LongTensor

Boolean

torch.bool

torch.BoolTensor

torch.cuda.BoolTensor

​ 其中用的比较多的有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: 概率值

posted @ 2021-01-13 16:08  hwa  阅读(140)  评论(0编辑  收藏  举报