天天看点

pytorch中tensor创建方法tensor的创建方法

tensor的创建方法

文章目录

  • tensor的创建方法
    • 总结
    • 直接创建
      • 使用`torch.tensor()`
    • 从numpy创建tensor
    • 依据数值创建张量
      • **使用`torch.zeros()`**创建全零张量
      • 使用`torch.zeros_like()`
      • 创建全1张量
      • 自定义数值创建张量
      • 创建等差的1维张量
      • 创建均分的1维张量
      • 创建对数均分的1维张量
      • 创建单位对角矩阵( 2维张量)
    • 依据概率分布来创建张量
      • 生成正态分布(高斯分布)
      • 生成标准正态分布
      • 在区间【0, 1)上,生成均匀分布
      • 区间【low, high)生成整数均匀分布
      • 生成生成从0到n-1的随机排列
      • 以input为概率,生成伯努力分布 (0-1分布,两点分布)

总结

直接创建

code 作用
torch.tensor() 直接创建
torch.from_numpy(ndarray) 从numpy创建tensor

按值创建

code 作用
torch.tensor() 直接创建
torch.from_numpy(ndarray) 从numpy创建tensor
torch.zeros()) 创建全零张量
torch.ones() torch.ones_like() 创建全1张量
torch.full() torch.full_like() 创建全n张量(n为自定义)
torch.arange() 创建等差的1维张量
torch.linspace() 创建均分的1维张量
torch.logspace() 创建对数均分的1维张量
torch.eye() 创建单位对角矩阵( 2维张量)

按概率分布创建

code 作用
torch.normal() 生成正态分布(高斯分布)
torch.randn() torch.randn_like() 生成标准正态分布
torch.rand() torch.rand_like() 在区间【0, 1)上,生成均匀分布
torch.randint () torch.randint_like() 区间【low, high)生成整数均匀分布
torch.randperm() 生成生成从0到n-1的随机排列
torch.bernoulli() 以input为概率,生成伯努力分布 (0-1分布,两点分布)

直接创建

使用

torch.tensor()

torch.tensor(data,dtype=None,device=None,requires_grad=False,pin_memory=False)
data 数据, 可以是list, numpy
dtype 数据类型,默认与data的一致
device 所在设备, cuda/cpu
requires_grad 是否需要梯度
pin_memory 是否存于锁页内存
  • 需要把张量放在GPU上,可以设置
device = `cuda`
           

从numpy创建tensor

使用

torch.from_numpy(ndarray)

使用torch.from_numpy创建的tensor和原来ndarray共享内存

依据数值创建张量

**使用

torch.zeros()

**创建全零张量

torch.zeros(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
参数 作用
size 张量的形状, 如(3, 3)、(3, 224,224)
out 输出的张量
layout 内存中布局形式, 有 strided,sparse_coo等
device 所在设备, gpu/cpu
requires_grad 是否需要梯度
  • out参数

    输入

out_t = torch.tensor([1])
t = torch.zeros((3,3), out=out_t)
           

打印结果

out_t与t是相同的

使用

torch.zeros_like()

依据input的形状创建全0张量

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

创建全1张量

使用

torch.ones()

使用

torch.ones_like()

torch.ones(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)
torch.ones_like(input,dtype=None,layout=None,device=None,requires_grad=False)
           

自定义数值创建张量

使用

torch.full()

使用

torch.full_like()

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

其中fill_value为张量的值

创建等差的1维张量

使用

torch.arange()

torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 数列起始值
  • **end **: 数列“结束值”
  • step: 数列公差,默认为1

创建均分的1维张量

使用

torch.linspace()

torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 数列起始值
  • end : 数列结束值
  • steps: 数列长度

创建对数均分的1维张量

使用

torch.logspace()

torch.logspace(start,
end,
steps=100,
base=10.0,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • start : 数列起始值
  • end : 数列结束值
  • steps: 数列长度
  • base : 对数函数的底,默认为10

创建单位对角矩阵( 2维张量)

使用

torch.eye()

torch.eye(n,
m=None,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • n: 矩阵行数
  • m : 矩阵列数

依据概率分布来创建张量

生成正态分布(高斯分布)

使用

torch.normal()

torch.normal(mean,
std,
out=None)
           
  • mean : 均值(可为标量,也可为张量)
  • std : 标准差(可为标量,也可为张量)

均值和标准差都是张量的时候需要给出size

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

生成标准正态分布

使用

torch.randn()

使用

torch.randn_like()

torch.randn(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
           
  • size : 张量的形状

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

使用

torch.rand()

使用

torch.rand_like()

区间【low, high)生成整数均匀分布

使用

torch.randint ()

使用

torch.randint_like()

生成生成从0到n-1的随机排列

使用

torch.randperm()

  • n : 张量的长度

以input为概率,生成伯努力分布 (0-1分布,两点分布)

使用

torch.bernoulli()

torch.bernoulli(input,
*,
generator=None,
out=None)
           
  • input : 概率值