Pytorch——tensor的相关概念

Tensor的概念

说起张量(tensor)就不得不说他和scalar、vertor、matrix之间的关系了,直接上图:

Pytorch——tensor的相关概念

标量(scalar):只有大小概念,没有方向的概念。通过一个具体的数值就能表达完整。比如:重量、温度、长度、提及、时间、热量等都数据标量。

向量(vector):物理学上也叫矢量,指由大小和方向共同决定的量(跟「标量」相区别)。向量主要有2个维度:大小、方向。比如:力、速度等

矩阵(matrix):(学过线性代数的都知道,可参见之前的线代笔记

张量(tensor):一个多维数组,它是标量、向量、矩阵的高位扩展 

如果说张量是标量、向量、矩阵的高阶对象。经常使用的学习框架是pytorch和tensorflow。

对于这两个框架而言,我只想用一句代码来阐述我心中的杂乱: 

Import torch as tf

 

而数组array这个概念,数组是类似于列表的高阶对象,是有序的元素序列。经常在Numpy里对数组进行运算。

Pytorch——tensor的相关概念

Tensor的属性

每一个tensor都有三个属性:torch.dtype,torch.device,torch.layout.

torch.dtype

Pytorch拥有12个不同的数据类型。

Pytorch——tensor的相关概念

 tensor类型 相关代码

>>> float_tensor = torch.ones(1, dtype=torch.float)
>>> double_tensor = torch.ones(1, dtype=torch.double)
>>> complex_float_tensor = torch.ones(1, dtype=torch.complex64)
>>> complex_double_tensor = torch.ones(1, dtype=torch.complex128)
>>> int_tensor = torch.ones(1, dtype=torch.int)
>>> long_tensor = torch.ones(1, dtype=torch.long)
>>> uint_tensor = torch.ones(1, dtype=torch.uint8)
>>> double_tensor = torch.ones(1, dtype=torch.double)
>>> bool_tensor = torch.ones(1, dtype=torch.bool)
>>> long_zerodim = torch.tensor(1, dtype=torch.long)
>>> int_zerodim = torch.tensor(1, dtype=torch.int)

>>> torch.add(5, 5).dtype
torch.int64
>>> (int_tensor + 5).dtype
torch.int32
>>> (int_tensor + long_zerodim).dtype
torch.int32
>>> (long_tensor + int_tensor).dtype
torch.int64
>>> (bool_tensor + long_tensor).dtype
torch.int64
>>> (bool_tensor + uint_tensor).dtype
torch.uint8
>>> (float_tensor + double_tensor).dtype
torch.float64
>>> (complex_float_tensor + complex_double_tensor).dtype
torch.complex128
>>> (bool_tensor + int_tensor).dtype
torch.int32
>>> torch.add(long_tensor, float_tensor).dtype
torch.float32

torch.device

 由于pytorch可以在Gpu上运行tensor的相关操作。

torch.device是一个对象,表示正在或将要分配 torch.tensor的设备。

torch.device一半可选的内容有 cpu,cuda或者一些设备类型的可选设备序号

>>> torch.device('cuda:0')
device(type='cuda', index=0)

>>> torch.device('cpu')
device(type='cpu')

>>> torch.device('cuda')  # current cuda device
device(type='cuda')
>>> torch.device('cuda', 0)
device(type='cuda', index=0)

>>> torch.device('cpu', 0)
device(type='cpu', index=0)

torch.layout

torch.layout 是表示 torch.tensor 的内存布局的对象。目前,torch.tensor支持torch.strided(密集张量)和sparse_coo(稀疏的COO张量)。

>>> x = torch.tensor([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
>>> x.stride()
(5, 1)

>>> x.t().stride()
(1, 5)

 

上一篇:mysql批量新增表字段脚本


下一篇:模板静态化