Tensor是什么?

Tensor即张量,是一个多维数组,是标量、向量、矩阵的高维拓展。
标量是一个单个数,是一个0维张量;
向量则是多个标量在同一个维度上的组合,是一个1维张量;
矩阵是多个向量在同一个维度上的组合,是一个2维张量;
而多个矩阵组成的则是3维张量……依次类推,

名称张量说明
标量0维张量单个数
向量1维张量多个标量在同一维度上的组合
矩阵2维张量多个向量在同一维度上的组合
………………
n维张量多个n-1维张量在同一维度上的组合

我们正常见到的图片大部分就是3个矩阵,分别代表了相应位置的三原色rgb的数值(0~255),组成了一张彩色的图片,这样三个矩阵的整体可以看做一个张量。

Tensor与Variable

Variable是 torch0.4.0 版本之前专门列出来的一个torch.autograd中的一个数据类型,提出这个概念是为了方便计算梯度。

Variable中包含如下属性:

属性作用
data张量的内容
grad张量的计算梯度
grad_fn张量使用的计算函数,方便计算梯度使用
requires_grad该张量是否需要计算梯度
is_leaf是否是叶子结点(计算图中使用)

后来的pytorch中Variable并入Tensor,并且多出如下属性:
Tensor:

属性作用
dtype张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
shape张量的形状,如(64,3,224,224)
device张量所在的设备,GPU/CPU

Tensor的创建

直接创建

从data创建

创建命令:torch.tensor()
功能:以data创建tensor

torch.tensor(
data,# 数据,可以是list,numpy
dtype=None,# 数据类型,默认与data的一致(None即默认)
device=None,# 所在设备,cuda/cpu
requires_grad=False,# 是否需要梯度
pin_memory=False)# 是否存于锁页内存,与转换效率有关,默认为False

从numpy创建

创建命令: torch.from_numpy(ndarray)
功能: 从numpy创建tensor

注意事项:用此方法创建的tensor与原ndarray共享内存,当修改其中一个的数据,另外一个也会被改动。

依据数值创建

zeros()

创建命令:torch.zeros()
功能:依据size创建全0张量

属性内容
size张量的形状,如(3,3)、(3,224,224)
out输出的张量
layout内存中布局形式,有strided(默认),sparse_coo(稀疏张量时设置此可提高读取效率)等
device所在设备
requires_grad是否需要梯度
torch.zeros(*size,
   out=None,
   dtype=None,
   layout=torch.strided,
   device=None,
   requires_grad=False)

zeros_like()

创建命令:torch.zeros_like()
功能:依input形状创建全0张量

属性内容
input创建与input同形状的全0张量
dtype数据类型
layout内存中布局形式
torch.zeros_like(input.
dtype=None,
layout=None,
device=None,
requires_grad=False)

ones,ones_like()

用法同zeros和zeros_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)

full,full_like()

用法同one和one_like(),只是可以指定填充值。
full():

属性内容
size张量的形状
fill_value张量的填充值
torch.full(size,
  fill_value,
  out=None,
  dtype=None,
  layout=torch.strided,
  device=None,
  requires_grad=False)

arrange()

创建命令:torch.arange()
功能:创建等差的一维张量
注意事项:数值区间为[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)

linspace()

创建命令: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)

logspace()

创建命令:torch.logspace()
功能:创建对数均分的1维张量
注意事项:长度为steps,底为base