PyTorch是一个不断发展的深度学习框架,具有许多令人兴奋的附加功能。我们将回顾其基本元素,并逐步演示构建简单的深度神经网络(DNN)的示例。
PyTorch的基础知识-简介
自从2017年初推出它以来, PyTorch 已经成为高度流行且广泛使用的深度学习(DL)框架。自从不起眼的开始以来,它就引起了全世界工业界和学术界的严肃AI研究人员和从业者的注意,并且这些年来已经显着成熟。
数十名DL发烧友和专业人士从百度开始了他们的旅程,但是基于TensorFlow的学习曲线一直很艰难。另一方面,PyTorch从一开始就以一种直观的方式进行DL编程,以一种易于理解且易于逐步学习的方式专注于基本线性代数和数据流运算。
由于采用了这种模块化方法,与遵循较为严格的TF和基于TF的工具框架相比,使用PyTorch进行复杂的DL架构的构建和试验变得容易得多。此外,PyTorch的构建是为了与Python生态系统的数值计算基础架构无缝集成,而Python是数据科学和机器学习的通用语言,它摆脱了这一日益流行的浪潮。
使用PyTorch进行Tensor操作
Tensors是任何DL框架的核心。PyTorch为程序员提供了极大的灵活性,使其可以在Tensors流经与相对高级的面向对象API配对的网络(称为计算图)时创建,组合和处理Tensors。
什么是Tensors?
通过称为Tensors的数据/数学结构来完成表示机器学习(ML)(尤其是DNN)的数据(例如,有关物理世界或某些业务流程的数据) 。Tensors是一个可以容纳N 维数据的容器。Tensors经常与另一个更熟悉的数学对象矩阵 (具体来说是二维Tensors)互换使用 。实际上,Tensors是二维矩阵到N维空间的推广 。
用简单的术语来说,可以将标量矢量矩阵Tensors视为一种流。
1)标量是0维Tensors。
2)向量是一维Tensors。
3)矩阵是二维Tensors
4)Tensors是广义的N维 Tensors。N可以是3到无穷大的任何数字。
通常,这些尺寸也称为 等级。
为什么Tensors对于ML和DL很重要?
考虑一个监督的机器学习问题。您会得到带有某些标签的数据表(可以是数字实体或二进制分类,例如“是/否”答案)。为了使用ML算法对其进行处理,必须将数据作为数学对象进行馈送。表格自然等效于2-D矩阵,其中单个行(或实例)或单个列(或要素)可以视为一维矢量。
类似地,黑白图像可以视为包含数字0或1的2-D矩阵。可以将其输入神经网络以进行图像分类或分割任务。
时间序列或序列数据(例如,来自监视机的ECG数据或股票市场价格跟踪数据流)是二维(二维)数据的另一个示例,其中一维(时间)是固定的。
这些是在经典ML(例如线性回归,支持向量机,决策树等)和DL算法中使用2-DTensors的示例。
超越二维,彩色或灰度图像可被视为3-DTensors,其中每个像素都与所谓的“色彩通道”相关联-“ 3-数字”矢量代表红绿蓝中的强度(RGB)光谱。这是一个3-DTensors的例子。
类似地,视频可以被认为是时间上的彩色图像(或帧)序列,并且可以被认为是4DTensors。
简而言之,可以通过多维Tensors轻松表示来自物理世界,传感器和仪器,商业和金融,科学或社会实验的各种数据,以使其适合在计算机内部通过ML/DL算法进行处理。
让我们看看PyTorch如何定义和处理Tensors。
在PyTorch中创建和转换Tensors
可以从Python列表中定义Tensors,如下所示:
可以按以下方式访问和索引实际元素
具有特定数据类型的Tensors可以轻松创建(例如,浮点数)
尺寸和尺寸易于阅读
我们可以更改Tensors的视图。让我们从一维Tensors开始,如下所示:
然后将视图更改为二维Tensors,
在PyTorchTensors和NumPy数组之间来回切换既简单又有效。
从熊猫系列对象进行转换也很容易,
最后,可以转换回Python列表,
使用PyTorch Tensors的向量和矩阵数学
PyTorch提供了一个易于理解的API和编程工具箱,以数学方式处理Tensors。我们在这里显示一维和二维Tensors的基本操作。
简单的向量加法
标量矢量乘法
线性组合
元素产品,
点积
在Tensors的每个元素上添加标量,即广播,
从列表中创建二维Tensors,
矩阵元素的切片和索引
矩阵乘法
矩阵转置
矩阵逆和行列式
Autograd:自动区分
神经网络的训练和预测涉及一遍又一遍地获取各种函数(Tensors值)的导数。Tensor对象支持神奇的Autograd功能,即自动微分,这是通过跟踪和存储在流过网络的Tensors上执行的所有操作来实现的。您可以观看以下精彩的教程视频以进行直观说明:
Pytorch autograd 官方文档在这里。
我们展示了一些简单的示例来说明PyTorch的autograd功能。
我们定义一个泛型函数和一个Tensors变量 x,然后定义另一个变量 y, 将其分配给x的函数 。
然后,我们 在y上使用特殊的 向后()方法 获取导数,并在给定的x值下计算导数 。
我们还可以处理偏导数!
我们可以将u 和 v定义为Tensors变量,定义将它们组合在一起的函数,应用反向方法,并计算偏导数。见下文,
PyTorch仅计算标量函数的导数,但是如果我们传递矢量,则本质上它将按元素计算导数并将它们存储在相同维数的数组中。
以下代码将针对三个组成矢量计算导数。
我们可以显示导数的图。注意,二次函数的导数是与抛物线曲线相切的直线。
建立完整的神经网络
除了Tensors和自动微分能力之外,PyTorch的其他核心组件/功能很少,可以对神经网络进行深入定义。
用于构建神经分类器的PyTorch的核心组件是,
1) Tensors (在PyTorch中央数据结构)
2)Tensor 的 Autograd功能(自动微分公式烘焙到
3)nn.Module 用来建立任何其他神经分类类类
4)优化器 (当然,也有很多可供选择)
5)损失 函数(一个大的选择是供你选择)
我们已经详细描述了Tensor和Autograd。让我们快速讨论其他组件,
nn.Module类
在PyTorch中,我们通过将其定义为自定义类来构建神经网络。但是,此类不是从本地Python对象派生的,而是从nn.Module类继承的 。这为神经网络类注入了有用的属性和强大的方法。这样,在使用神经网络模型时,可以保持面向对象编程(OOP)的全部功能。我们将在大数据分析PyTorchx深度学习框架教程中看到此类定义的完整示例。
损失函数
在神经网络的架构和操作中,损失函数定义了神经网络的最终预测与地面真实情况(给定标签/类或用于监督训练的数据)之间的距离。损失的定量度量有助于使网络更接近配置(神经元权重的最佳设置),从而最好地对给定的数据集进行分类或预测总误差最小的数值输出。
PyTorch提供了用于分类和回归任务的所有常见损失函数-
1)二元和多类交叉熵,
2)均方根和绝对绝对误差,
3)L1损失平稳
4)对数似然损失,甚至
5)Kullback-Leibler分歧。
可以在大数据分析PyTorchx深度学习框架教程中找到有关这些内容的详细讨论。
优化器
权重的优化以实现最低的损失是用于训练神经网络的反向传播算法的核心。PyTorch通过torch.optim模块提供了许多优化器来完成这项工作-
1)随机梯度下降(SGD),
2)亚当,阿达德塔,阿达格勒,SpareAdam,
3)L-BFGS,
4)RMSprop等
查看大数据分析PyTorchx深度学习框架教程以了解更多有关现代深度神经网络中使用的激活函数和优化器的信息。
五步法
使用这些组件,我们将通过五个简单的步骤构建分类器,
1)将神经网络构造为自定义类(继承自 nn.Module 类),其中包含隐藏层Tensors以及用于通过各种层和激活函数传播输入Tensors的正向方法
2)使用forward() 方法在网络中传播特征Tensors(从数据集中) -说我们得到一个输出Tensors
3)通过将输出与地面真实情况进行比较并使用内置损耗函数来计算损耗
4)使用自动微分能力(Autograd)和向后方法传播损失的梯度
5)使用损耗的梯度来更新网络的权重-这是通过执行所谓的优化器-optimizer.step()的一个步骤来完成的。
就是这样。这个五步过程构成了 一个完整的培训时期。我们只重复一遍,以降低损失并获得较高的分类精度。
这个主意如下:
动手实例
假设我们要构建和训练以下2层神经网络。
我们从类定义开始,
我们可以将变量定义为属于此类的对象,然后打印摘要。
我们选择二进制交叉熵损失,
让我们通过已定义的神经网络模型运行输入数据集,即 一次向前通过并计算输出概率。由于权重已初始化为随机,因此我们将看到随机输出概率(大多数接近0.5)。 该网络尚未训练。
我们定义优化器
接下来,我们展示如何使用优化程序的一个步骤进行正向和反向传递。 可以在任何PyTorch神经网络模型的核心找到这组代码。我们遵循另外五个步骤
1)将渐变重置为零(以防止渐变累积)
2)将Tensors向前穿过层
3)计算损失Tensors
4)计算损失的梯度
5)通过将优化器增加一级(沿负梯度的方向)来更新权重
上面的五个步骤 正是您在有关神经网络和深度学习的所有理论讨论中(以及在教科书中)可以观察和了解的。而且,借助PyTorch,您可以逐步使用看似简单的代码来实现此过程。
代码如下所示
当 我们在一个循环上(对于多个时期)运行相同类型的代码时,我们可以观察到熟悉的损耗曲线下降,即神经网络逐渐受到训练。
在训练了200个时期之后,我们可以再次直接查看概率分布,以查看神经网络输出概率现在有何不同(尝试与真实数据分布匹配)。
PyTorch基础知识摘要
PyTorch是一个很好的软件包,可用于深入神经网络的核心并针对您的应用对其进行自定义,或者尝试使用网络的体系结构,优化和机制来尝试大胆的新想法。
您可以轻松地构建复杂的互连网络,尝试新颖的激活函数,混合并匹配自定义损失函数等。计算图,轻松的自动微分以及Tensors的正向和反向流动的核心思想将对您的任何人都很方便神经网络定义和优化。
在大数据分析PyTorchx深度学习框架教程中,我们总结了一些关键步骤,可以遵循这些关键步骤来快速构建用于分类或回归任务的神经网络。我们还展示了如何使用此框架轻松地尝试巧妙的想法。
填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!
©2007-2022/ www.aaa-cg.com.cn 北京漫动者数字科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc