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()
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()
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()
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 : 概率值