楼主: 时光永痕
824 0

[数据挖掘新闻] 您应该知道的PyTorch最重要的基础 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)三级

57%

威望
0
论坛币
26 个
通用积分
49.7576
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34070 点
帖子
2731
精华
0
在线时间
316 小时
注册时间
2020-7-21
最后登录
2024-4-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

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

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:最重要的 最重要 RCH OPTIMIZE Research

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 21:26