一、Tensor的概念
一、张量(Tensor)
张量是一个多维数组,它是标量、向量、矩阵的高维扩展
二、Tensor与Variable
torch.autograd.Variable(包含data、grad、grad_fn、requires_grad、is_leaf)
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导
data: 被包装的Tensor
grad: data的梯度
grad_fn: 创建Tensor的Function,是自动求导的关键
requires_grad: 指示是否需要梯度
is_leaf: 指示是否是叶子节点(张量)
三、Tensor
PyTorch0.4.0版开始,Variable并入Tensor
dtype: 张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
shape: 张量的形状,如(64,3,224,224)
device: 张量所在设备,GPU/CPU,是加速的关键
torch.Tensor(含有data,dtype,shape,device,requires_grad,grad,grad_fn,is_leaf几个模块)
二、Tensor创建一:直接创建
1、torch.tensor()
功能: 从data创建tensor
data: 数据可以是list,numpy
dtype: 数据类型,默认与data的一致
device: 所在设备,cuda/cpu
requires_grad: 是否需要梯度
pin_memory: 是否存于锁页内存
torch.tensor(
data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False
)
example:
import numpy as np
import torch
arr = np.ones((3, 3))
print(arr.dtype)
print(torch.tensor(arr))
2、torch.from_numpy(ndarray)
功能: 从numpy 创建 tensor
注意事项: 从torch.from_numpy 创建的tensor于原ndarray共享内存,当修改其中一个的数据,量竵一个也将会被改动
example:
arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print(arr)
print(t)
arr[0, 0] = 0
print(arr)
print(t)
arr[0, 0] = -1
print(arr)
print(t)
三、Tensor创建二: 依据数值创建
1、torch.zeros()
功能: 依size创建全0张量
size: 张量的形状,如(2,3),(3,244,244)
out: 输出的张量
layout: 内存中布局形式,有strided,sparse_coo等
device: 所在设备,gpu/cpu
requires_grad: 是否需要梯度
torch.zeros(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False
)
example:
out_t = torch.zeros((3, 3))
print(out_t)
2、torch.zeros_like()
功能: 依input形状创建全0张量
input: 创建与input同形状的全0张量
dtype: 数据类型
layout: 内存中布局形式
torch.zeros_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False
)
3、torch.ones()
4、torch.ones_like()
5、torch.full()
torch.full(
size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False
)
6、torch.full_like()
功能: 依input形状创建全0张量
size: 张量的形状,如(3,3)
full_value: 张量的值
7、torch.arange()
功能: 创建等差1维张量
注意事项: 数值区间[start,end)
start: 数列起始值
end: 数列结束值
step: 数列公差,默认为1
torch.arange(
start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
8、torch.linspace()
功能: 创建均分的1维张量
注意事项: 数值区间[start,end]
start: 数列起始值
end: 数列结束值
steps: 数列长度
torch.linspace(
start,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
9、torch.logspace()
功能: 创建对数均分的1维张量
注意事项: 长度为steps,底为base
start: 数列的起始值
end: 数列的结束值
steps: 数列长度
base: 对数函数的底,默认为10
torch.logspace(
start,end,steps=100,base=10,out=None,dtype=None,layout=torch.strided,device=None,requres_grad=False)
10、torch.eye()
功能: 创建单位对角矩阵(2维张量)
注意事项: 默认为方阵
n: 矩阵行数
m: 矩阵列数
四、Tensor创建三: 依据概率创建
1、torch.normal()
功能: 生成正态分布(高斯分布)
mean: 均值
std: 均方差
四种模式:
mean为标量 && std为标量
mean为标量 && std为张量
mean为张量 && std为标量
mean为张量 && std为张量
2、torch.randn()
torch.randn(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
3、torch.randn_like()
功能: 生成标准正态分布
size: 张量的形状
4、torch.rand()
torch.rand(*size,
out=None,
dtype=None, layout=torch.strided, device=None, requires_grad=False)
5、torch.rand_like()
功能: 在区间[0,1)上,生成均匀分布
6、torch.randint()
torch.randint(low=0,
high,
size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
7、torch.randint_like()
功能: 区间[low,high)生成整数均匀分布
size: 张量的形状
8、torch.randperm()
功能: 生成从0到n-1的随机排列
torch.randperm(n, out=None,
dtype=torch.int64,
layout=torch.strided,
device=None,
requires_grad=False)
9、torch.bernoulli()
功能: 以input为概率,生成伯努力分布(0-1分布,两点分布)
input:概率值
torch.bernoulli(input,
*,
generator=None,
out=None)