PyTorch入门(二)——张量的创建

张量

张量的定义

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

特殊的张量:

  1. 标量——0维张量
  2. 向量——1维张量
  3. 矩阵——2维张量

Tensor与Variable

Variable是torch.autograd中的数据类型主要用于封装Tensor,进行自动求导

Variable的属性有:

  1. data:被包装的Tensor
  2. grad:data的梯度
  3. grad_fn: 创建Tensor的Function,是自动求导的关键
  4. requires_grad:指示是否需要梯度
  5. is_leaf:指示是否是叶子结点(张量)

Tensor:从PyTorch0.4.0版本开始,Variable并入Tensor中。

Tensor除了拥有Variable的属性外,还有:

  1. dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
  2. shape:张量的形状,如:(64,3,224,224)
  3. device:张量所在设备,GPU/CPU,是借宿的关键

张量的创建

1.直接创建

torch.tensor()

torch.tensor(
			data,
			dtype=None,
			device=None,
			requires_grad=False,
			pin_memory=False
			)

功能:从data创建tensor

  1. data:数据,可以是list,numpy
  2. dtype:数据类型,默认与data的一致
  3. device:所在的设备,cuda/cpu
  4. requires_grad:是否需要梯度
  5. pin_memory:是否存于锁业内存

torch.from_numpy(ndarray)

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

2.依据数值创建

torch.zeros()

torch.zeros(
			size,
			out=None,
			dtype=None,
			layout=torch,strided
			device=None
			requires_grad=False)

功能:依size创建全0张量

  1. size:张量的形状,如(3,3)、(3,224,224)
  2. out:输出的张量
  3. layout:内存中的布局形式,有strided,sparse_coo(数据为稀疏矩阵时才使用)
  4. device:所在的设备,gpu/cpu
  5. requires_grad:是否需要梯度

torch.zeros_like()

torch.zeros_like(
				input_data,
				dtype=None,
				layout=torch.strided,
				device=None,
				requires_grad=False)

功能:依据input_data的形状创建全0张量

  1. input_data:创建与input同形状的全0张量
  2. dtype:数据类型
  3. layout:内存中的布局形式

torch.ones()

功能同torch.zeros,不同之处在于创建的为全1张量

torch.ones_like()

功能同torch.zeros_like(),不同点在于创建全1张量

torch.full()

torch.full(
			size,
			fill_value,
			out=None,
			dtype=None,
			layout=torch.strided,
			requires_grad=False)

功能:依据size输入的形状,创建值全为fill_value的张量

torch.full_like()

功能与torch.zeros_like类似,填充某个值

torch.arange()

torch.arange(
			start=0,
			end,
			step=1,
			out=None,
			dtype=None,
			layout=torch.strided,
			device=None,
			requires_grad=False)

功能:创建等差的1维张量
注意事项:数值区间为[start,end)左开右闭

  1. start:数列起始值
  2. end:数列结束值(取不到)
  3. step:数列的公差,默认为1

torch.linspace()

torch.linspace(
				start,
				end,
				steps=100,
				out=None,
				dtype=None,
				layout=torch.strided,
				device=None,
				requires_grad=False)

功能:创建均分的1维张量
注意事项:数值区间为[start,end] (全部能取到)

  1. start:数列起始值
  2. end:数列结束值
  3. steps:数列长度(数列中元素的个数)

torch.logspace()

torch.logspace(
				start,
				end,
				steps=100,
				base=10.0,
				out=None,
				dtype=None,
				layout=torch.strided,
				device=None,
				requires_grad=False)

功能:创建对数均分的1维张量
注意事项:长度为steps,底数为base

  1. start:数列起始值
  2. end:数列结束值
  3. steps:数列长度(数列中元素的个数)
  4. base:对数函数的底数,默认值为10.0

torch.eye()

torch.eye(
			n,
			m=None,
			dtype=None,
			layout=torch.strided,
			device=None,
			requires_grad=False)

功能:创建单位对角矩阵(2维张量)
注意:默认为方阵

  1. n:矩阵行数
  2. m:矩阵列数

依据概率分布

torch.normal()

torch.normal(mean,std,out=None)

功能:生成正态分布(高斯分布)

  1. mean:均值
  2. std:标准差

四种模式:

  1. mean为标量,std为标量
  2. mean为标量,std为张量
  3. mean为张量,std为标量
  4. mean为张量,std为张量

torch.randn()

功能,生成标准正态分布,大小为size。功能类似torch.zeros()

torch.randn_like()

功能:生成标准正态分布,大小为input_data的size

torch.rand()

torch.rand_like()

在区间[0,1)上生成均匀分布

torch.randint()

torch.randint(
				low=0,
				high,
				size,
				out=None,
				dtype=None,
				layout=torch.strided,
				device=None,
				requires_grad=False)

torch.randint_like()

在区间[low,high)生成整数均匀分布的size大小的张量
size:张量的形状

torch.randprem()

torch.randperm(
				n,
				out=None,
				dtype=torch.int64,
				layout=torch.strided,
				device=None,
				requires_grad=False)

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

torch.bernoulli()

torch.bernoulli(
				input,
				*,
				generator=None,
				out=None)

功能:以input为概率,生成伯努利分布

猜你喜欢

转载自blog.csdn.net/qq_19672707/article/details/102973336