张量的构建
- Tensor概念
- Tensor创建一:直接创建
- Tensor创建二:依据数值创建
- Tensor创建三:依据概率创建
张量是什么?
张量其实就是一个多维数组,它是标量、向量、矩阵的高维拓展:
Tensor与Variable
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行自动求导,接下来先来看下torch.autograd.Variable这个数据类型,理解了Variable其实对于理解张量是有帮助的:
可以看到,Variable中包含了5个属性:
- data:表示被包装的Tensor
- grad:表示data的梯度
- grad_fn:表示创建Tensor的Function,是自动求导的关键
- requires_grad:指示是否需要梯度,并不是所有的张量都需要计算梯度,若张量需要计算梯度,那么设置requires_grad=True,反之设置requires_grad=False
- is_leaf:指示是否是叶子结点(张量)
Tensor
从Pytorch0.4.0版本开始,Variable就并入了Tensor,那么我们来看下torch.Tensor这个数据类型的具体细节:
torch.Tensor主要包含8个数据类型,其中有5个属性上面介绍Variable时已经讲述过了,所以主要介绍一下其余的3个属性:
- dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
- shape:张量的形状,如(64,3,224,224)
- device:张量所在的设备,GPU/CPU,是加速的关键
张量的创建
一、直接创建
torch.tensor()
功能:从data创建tensor
- data:数据,可以是list,numpy
- dtype:数据类型,默认与data的一致
- device:所在设备,cuda/cpu
- requires_grad:是否需要梯度
- pin_memory:是否存于锁页内存
torch.from_numpy(ndarray)
功能:从numpy创建tensor
需要注意的是,从torch.from_numpy创建的tensor与原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动。
二、依据数值创建
torch.zeros()
功能:依size创建全0张量
- size:张量的形状,如(3,3),(3,224,224)
- out:输出的张量
- layout:内存中布局形式,有stride,sparse_coo等
- device:所在设备,gpu/cpu
- requires_grad:是否需要梯度
torch.zeros_like()
功能:依input形状创建全0张量