首页人工智能Pytorch【深度学习(PyTorch...

【深度学习(PyTorch篇)】3.PyTorch基本数据结构——张量(Tensor)


本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1XuxKa9_G00NznvSK0cr5qw?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/PyTorch





01

张量(Tensor)


为了将真实世界中的数据处理为神经网络可理解的数据,PyTorch引入了一种基本的数据结构——张量Tensor
事实上,神经网络内部和优化过程中的所有操作都是张量之间的操作,PyTorch之所以引入张量这种数据结构主要是出于以下几个原因:
  • 多维数据表示:张量是一种能够表示多维数据的数据结构,比如一个数(标量)、一维数组(向量)、二维数组(矩阵、灰度图像)或更高维的数组(视频等)。使用张量可以方便地存储和操作这些数据。
  • GPU加速计算PyTorch的张量支持在GPU上进行计算,通过利用GPU的并行计算能力,可以大大加速深度学习模型的训练和推理过程,这对于处理大规模数据集和复杂模型非常有用。
  • 自动微分PyTorch的张量具有自动微分功能,可以方便地计算梯度。在深度学习中,经常需要计算损失函数对模型参数的梯度,以便使用梯度下降等优化算法来更新模型参数,使用张量的自动微分功能可以简化这一过程。
  • 动态计算图PyTorch采用动态计算图的方式,这意味着计算图是在运行时构建的。使用张量作为基本数据结构,可以方便地构建和修改计算图,使得模型的开发和调试更加灵活。
  • NumPy兼容性PyTorch的张量与NumPy的数组(ndarray)具有很好的兼容性。用户可以在PyTorchNumPy之间轻松地转换数据,这使得在使用PyTorch进行深度学习开发时,可以方便地利用NumPy提供的丰富数学函数和库。

综上,从工程的角度来说,可以简单的认为张量Tensor)是一个支持高效科学计算的数组。

02

张量操作接口


因此,如果之前使用过Numpy的话,那么对张量的一些基本操作就会比较熟悉。
Numpy相关内容可以参看之前文章:
【Python数据分析】系列文章中的Numpy部分
PyTorch针对张量的操作提供了以下两类接口:
  • 模块级函数(Module-level functions):

这些函数通常在 torch 命名空间下,可以通过 torch. 前缀来访问。它们通常不修改输入张量,而是返回一个新的张量。例如,生成随机数的 rand 方法可以通过torch.rand() 调用

# .rand()方法随机的使用[0,1)的均值分布进行随机生成
>>> torch.rand(3,3)
tensor([[0.1038, 0.5749, 0.5616],
        [0.5033, 0.2669, 0.6490],
        [0.1425, 0.8941, 0.3171]]
)
  • 张量级方法(Tensor-level methods):
这些方法是定义在张量对象上的,可以通过张量实例直接调用。例如,改变张量形状的方法 reshape 可以通过 tensor.reshape() 来调用。
>>> a = torch.rand(4,1,28,28)
>>> a.shape
torch.Size([412828])

# replace
>>> a.reshape(4,28*28)
tensor([[0.83710.97280.5271,  ..., 0.35280.85270.6425],
        [0.58360.00160.3612,  ..., 0.83420.58800.9205],
        [0.69590.97890.6670,  ..., 0.48950.27000.4503],
        [0.00500.37830.7148,  ..., 0.43390.34030.2258]])
>>> a.reshape(4,28*28).shape
torch.Size([4784])
张量级方法有些会返回新的张量,而有些则会原地修改张量(inplace operations)。函数名以下划线 _ 结尾的函数都是inplace方式。
>>> a = torch.ones(3)
>>> a
tensor([1., 1., 1.])
>>> b = torch.ones(3)
>>> b
tensor([1., 1., 1.])

# 普通方法
>>> b.add(a)
tensor([2., 2., 2.])
>>> b
tensor([1., 1., 1.])

# inplace方法
>>> b.add_(a)
tensor([2., 2., 2.])
>>> b
tensor([2., 2., 2.])
对于大多数操作来说,PyTorch 提供了模块级函数和张量级方法两种方式来执行相同的任务。选择哪种方式主要取决于个人偏好和代码的清晰性。在某些情况下,使用张量级方法可能更简洁,特别是当操作链式调用时。而在其他情况下,使用模块级函数可能更加清晰,特别是当与其他库或框架集成时。
需要注意的是,不是所有的模块级函数都有对应的张量级方法,也不是所有的张量级方法都有对应的模块级函数。因此,在编写代码时,需要查阅 PyTorch 文档来确定所需的功能是否可用以及如何使用。

更多内容可以前往官网查看

https://pytorch.org/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments