Tensor的概念
说起张量(tensor)就不得不说他和scalar、vertor、matrix之间的关系了,直接上图:
标量(scalar):只有大小概念,没有方向的概念。通过一个具体的数值就能表达完整。比如:重量、温度、长度、提及、时间、热量等都数据标量。
向量(vector):物理学上也叫矢量,指由大小和方向共同决定的量(跟「标量」相区别)。向量主要有2个维度:大小、方向。比如:力、速度等。
矩阵(matrix):(学过线性代数的都知道,可参见之前的线代笔记)
张量(tensor):一个多维数组,它是标量、向量、矩阵的高位扩展
如果说张量是标量、向量、矩阵的高阶对象。经常使用的学习框架是pytorch和tensorflow。
对于这两个框架而言,我只想用一句代码来阐述我心中的杂乱:
Import torch as tf
而数组array这个概念,数组是类似于列表的高阶对象,是有序的元素序列。经常在Numpy里对数组进行运算。
Tensor的属性
每一个tensor都有三个属性:torch.dtype,
torch.device,
和torch.layout
.
torch.dtype
Pytorch拥有12个不同的数据类型。
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)