【Pytorch】Tensor的基础知识

Tensor的基础知识

张量的基本概念

​ 张量(Tensor)是神经网络中使用的主要数据结构,在网络的输入、转换和输出都涉及到张量。张量的概念是对其他更具体概念的数学概括,张量在计算机科学方面和数学方面本质上相同,但术语不同,对比图如下,其中Indexes required表示需要的索引数。
【Pytorch】Tensor的基础知识_第1张图片

​ 换言之,在深度学习和神经网络中,张量是n维数组,我们用张量这个词来表示所有的n值,比如标量是零维张量、矢量是一维张量、矩阵是二维张量、n维数组是n维张量。

张量的基本属性

张量的基本属性主要有三个:

  • 秩(Rank)
  • 轴(Axes)
  • 形状(Shape)

(1)张量的秩是指张量中存在的维数

(2)张量的轴是指一个张量的一个特定的维数

(3)张量的形状是由每个轴的长度决定

​ 三者的联系为一个张量的秩告诉我们一个张量有多少个轴,每个张量的形状告诉我们每个轴的长度,而轴的长度告诉我们沿轴有多少个索引!

​ 举一个3乘以3的矩阵进行说明:

import torch
array = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
t = torch.tensor(array)
len(t.shape)
t.shape

结果显示:

在这里插入图片描述

在这里插入图片描述

结果分析:

1.	一个张量的大小(Size)和一个张量的形状(Shape)是一样的。
2.	这个张量的形状揭示了一个张量的秩,该秩等于它的形状的长度。
3.	这个秩为2的张量的每一个轴的长度是3

补充说明:

​ 一个张量的形状很重要,主要有以下几个原因:

  1. 形状有利于我们想象一个更高阶和更抽象的张量
  2. 形状对所有有关轴、秩和索引的信息进行了编码
  3. 神经网络中的重塑操作需要结合形状进行(在重塑时分量值的乘积等于张量中元素的总数)

Pytorch张量的属性

Pytorch张量除了拥有基本的三种属性外,还具备以下三种属性:

  • 数据类型
  • 设备
  • 布局
import torch
t = torch.Tensor()
print(t.dtype)
print(t.device)
print(t.layout)

结果如下:

torch.float32
cpu
torch.strided

(1)数据类型

【Pytorch】Tensor的基础知识_第2张图片

(2)设备

​ 我们可以为张量指定一个设备,这个设备可以是CPU,也可以是GPU,这决定张量计算的位置。

device = torch.device('cuda:0')
device

​ 在jupyter notebook上运行上面的代码,其输出结果如下:

device(type='cuda', index=0)

​ 这意味着这个设备是一个GPU,index=0表示第一个GPU。

​ 注意事项:

  1. 在使用多设备时,张量只能与存在于同一个设备上的其他张量之间进行操作。
  2. 只用相同数据类型的张量之间才能进行指定的操作,否则将报错。

Pytorch张量的创建

​ (1)Pytorch中提供了四种不同的方法来创建有初始值的张量,具体如下:

import torch
import numpy as np
data = np.array([1, 2, 3])
# 四种不同方法
torch.Tensor(data)
torch.tensor(data)
torch.as_tensor(data)
torch.from_numpy(data)

四种方法各自返回的结果如下:

【Pytorch】Tensor的基础知识_第3张图片

四种方法的区别:

  1. 第一个方法是类的构造函数,其他三个方法是构建张量对象的工厂函数
  2. 构造函数在构造一个张量时使用全局缺省值,而工厂函数则根据输入推断数据类型
  3. 工厂函数允许显示配置数据类型,而构造函数则没有这个功能
  4. 第一个方法和第二个方法在内存中创建了一个额外的输入数据副本,而第三个方法和第四个方法则是在内存中共享数据(可以类比指针)。

对于第4点的区别可通过如下代码进行说明:

import torch 
import numpy as np
data = np.array([1, 2 , 3])

t1 = torch.Tensor(data)
t2 = torch.tensor(data)
t3 = torch.as_tensor(data)
t4 = torch.from_numpy(data)
# 改变元素的值
data[0] = 0
data[1] = 0
data[2] = 0

print(t1)
print(t2)
print(t3)
print(t4)

结果如下:

tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)

在选择方法时,建议优先考虑torch.tensor()和torch.as_tensor().

(torch.from_numpy调用时只接受numpy数组)

(2)Pytorch中有几种没有提供任何数据的情况下使用的创建选项,具体如下:

【Pytorch】Tensor的基础知识_第4张图片

你可能感兴趣的:(Pytorch,python,深度学习,数据结构)