【Deep Learning with PyTorch 中文手册】(六)It starts with a tensor
It starts with a tensor
深度学习支持许多应用程序,这些应用程序总是包括以某种形式(如图像或文本)获取数据,并以另一种形式(如标签、数字或更多文本)生成数据。从这个角度来看,深度学习包含着构建一个可以将数据从一种表征转换成另一种表征的系统。这种转换是通过从一系列示例中提取能够反映预期映射关系的共性来驱动的。例如,该系统可能会记录狗的常见形状和金毛猎犬的典型颜色。通过组合这两个图像属性,系统可以正确地将具有给定形状和颜色的图像映射到金毛猎犬的标签,而不是黑色的实验室(或者推断是黄褐色的公猫)。生成的系统可以喂入大量类似的输入,并为这些输入生成有意义的输出。
这个过程的第一步是将输入转换为浮点数,正如读者在下图的第一步中所看到的(也可能是其他类型的数据)。因为网络使用浮点数来处理信息,所以读者需要对那种真实世界的数据进行编码,使其成为网络可理解的内容,然后再将输出解码回读者可以理解并用于某种用途的内容。
从数据的一种形式到另一种形式的转换通常是由一个深度神经网络分阶段学习到的,这意味着读者可以将不同阶段之间部分转换的数据视为一系列内在表示。对于图像识别,较浅层的表征可能是某种特征(如边缘检测)或纹理(如毛发)。更深层次的表征可以捕捉到更复杂的结构(如耳朵、鼻子或眼睛)。
通常,这种中间表征形式是浮点数的集合,这些浮点数对输入进行表征以及捕获数据中的结构,从而有助于描述输入如何映射到神经网络的输出。这种表征是特定于当前任务的,并且可以从相关示例中学习。这些浮点数的集合及其操作是现代AI的核心。请务必牢记,这些中间表征(例如上图第二步所示)是将输入与前一层神经元权重相结合的结果。每个中间表征对于之前的输入都是唯一的。
在读者尝试动手将数据转换为浮点输入前,读者必须对PyTorch如何处理和存储数据(作为输入、作为中间表征以及作为输出)有深入的了解。本章致力于帮助读者准确地理解这些原理。
为此,PyTorch引入了一个基本的数据结构:张量。对于那些出身于数学、物理学或工程学的人来说,张量这个术语与空间、参考系以及它们之间的转换的概念是捆绑在一起的。对于其他人来说,张量是将向量和矩阵推广到任意维度的数组,如下图所示。与张量这一概念表示相同意思的另一个术语就是多维数组。张量的维数与张量中用来索引标量值的索引数是一致的。
PyTorch并不是唯一能处理多维数组的库。NumPy是迄今为止最受欢迎的多维数组库,可以说它已经成为数据科学的通用语言。实际上,PyTorch可以与NumPy无缝衔接,这使得PyTorch能够与Python中的其他科学库(如SciPy,Scikit-learn和Pandas)进行高度的集成。
与NumPy数组相比,PyTorch张量具有一些超能力,例如能够在图形处理单元(GPU)上执行快速操作,在多个设备或机器上实现分布操作以及跟踪创建这些操作的计算图。所有这些功能对于构建现代深度学习库都非常重要。
我们通过介绍PyTorch张量来开启本章,涵盖了基础入门的知识。我们向读者展示了如何使用PyTorch张量库来处理张量,涵盖诸如数据如何存储在内存中以及如何在有限时间内对任意规模的张量执行某些操作之类的内容。进而我们又讲到了与NumPy的集成性和GPU加速。
如果读者要将张量作为编程工具之一,那么理解张量的功能和API是非常重要的。