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