【Deep Learning with PyTorch 中文手册】(三)Execution Mode

​Immediate versus Deferred Execution

深度学习库的关键区别在于是即时执行(Immediate Execution)还是延迟执行(Deferred Execution)。PyTorch的易用性很大程度上取决于它如何实现即时执行,因此我们在这里简要介绍一下。

首先看一个例子,如果需要执行勾股定理表达式,需要定义两个变量a和b,Python实现过程如下:

>>> a = 3

>>> b = 4

>>> c = (a**2 + b**2) ** 0.5

>>> c

5.0

像这样获取输入值(a、b)后得到输出值(c)的过程就是即时执行。PyTorch就像普通的Python程序一样,默认执行方式为即时执行(在PyTorch文档中称为Eager Mode)。即时执行非常有用,如果在执行某个表达式时出现错误,Python的解释器、调试器或者其他类似的工具都能够直接访问到相关的Python对象,并且在执行出错的地方会直接抛出异常。

现在讨论另一种情况,我们可以先行定义勾股定理表达式而不必关心具体的输入是什么,随后我们在获取到具体的输入时再使用该表达式得到输出。我们定义的函数可以根据不同的输入而随时调用。比如像这样:

>>> p = lambda a,b: (a**2 + b**2) ** 0.5

>>> p(1,2)

2.23606797749979

>>> p(3,4)

5.0

在第二个例子中,我们定义了一系列待执行的操作,并返回一个输出函数(p)。然而直到我们给定了具体的输入,这些操作才会执行。这个例子就是延迟执行。延迟执行意味着大多数异常是在函数调用时(而不是在函数定义时)抛出的。对于普通的Python程序(第二个例子)来说,这种实现方式很不错。这是因为在程序发生错误时,解释器和调试器能够完全访问到Python的状态。

然而,如果我们使用具有大量运算符重载的专用类,允许那些即时执行的操作推迟到后台运行,情况就会变得复杂棘手。这些专用类看上去可能长这个样子:(作者你又开始暗指某厂了 - -)

>>> a = InputParameterPlaceholder()

>>> b = InputParameterPlaceholder()

>>> c = (a**2 + b**2) ** 0.5

>>> callable(c)

True

>>> c(3, 4)

5.0

通常,在采用上述这种函数定义形式的库中,对a和b求平方、相加再取平方根的操作不会被记录为高级的Python字节码。相反,这些库更倾向于将表达式编译成静态计算图(包含基本操作的图),这种方式相比于纯Python代码的形式可能会有一些优势(例如出于性能原因将数学公式直接编译为机器代码)。

计算图在某处定义,却在别处执行,这会使得调试变得更加困难。因为异常通常会缺失关于错误的具体信息,并且Python的调试工具也看不到数据的中间状态。另外,静态图通常不能很好地与标准Python控制流融合:它们实际上是基于宿主语言(本例中是Python)而实现的针对特定领域的语言。

接下来,我们将更具体地研究即时执行和延迟执行之间的区别,特别是在与神经网络相关的情况下。在这里我们不会深入地探索这些概念,而是在宏观角度上给读者介绍一下这些概念中的术语及其关系。理解这些概念及其关系可以帮助我们理解像PyTorch这种使用即时执行的框架与使用延迟执行的框架之间的区别,尽管这两种类型框架的底层数学原理是相同的。

神经网络的基本组成单元是神经元。大量的神经元串在一起构成神经网络。

下图中第一行展示的是单个神经元典型的数学表达式:

o = tanh(w * x + b)

在我们解释下图中的执行模式前,有以下几点需要说明:

x 是单个神经元计算的输入。

w 和 b 是神经元的参数或者说是权重,根据需求它们的值可以被更新。

为了更新参数(生成更接近我们预期的输出),我们通过反向传播将误差分配给每个权重,然后相应地对每个权重进行调整。

反向传播需要计算输出相对于权重的梯度。

我们使用自动微分来自动计算梯度,节省了手工编写微分计算的麻烦。

在上图中,神经元被编译进一个符号图,其中每个节点表示一个独立的操作(第二行),并对输入和输出使用占位符。然后,在将具体数字放入占位符中后(在本例中,放入占位符中的数字是存储在变量w、x和b中的值),该计算图便进行数值运算(第三行)。输出结果相对于权重的梯度是通过自动微分构造的,该自动微分反向遍历计算图并在各个节点处乘以梯度(第四行)。第五行展示了相应的数学表达式。

TensorFlow是深度学习框架中主要的竞争对手之一(作者表示我不想暗指了,没错就是你,hiahia),采用类似延迟执行的静态图模式。静态图模式是TensorFlow 1.0中的默认执行模式。相比之下,PyTorch使用了一个按运行定义的动态图引擎,其中计算图是逐节点构建的,同时代码是即时执行的。

下图中的上半部分展示了在动态图引擎下的计算操作,这一部分和静态图模式是相同的。计算操作被分解成独立的表达式,当执行到这些表达式时,它们会即时运算。该程序对这些计算之间的内在联系没有预先的概念。下图中的下半部分展示了表达式的动态计算图的后台运行场景。表达式仍然被分解为独立的操作,但是这些操作会即时运算求值,进而促使动态图逐步建立。自动微分是通过反向遍历运算结果图来实现的,类似于静态计算图。注意,这并不意味着动态图自身就比静态图更有能力,只是动态图通常更容易完成循环或条件判断这些操作。

动态图在连续的前向传递过程中可能会发生变化。例如,可以根据前面节点的输出情况调用不同的节点,而不需要在图本身中表示出这些情况,这与静态图模式相比有明显的优势(有理有据,加十分)。

目前主要的一些框架都趋向于支持以上两种操作模式。PyTorch 1.0能够在静态计算图中记录模型的执行情况,或通过预编译的脚本语言对其进行定义,从而提高了性能并易于将模型部署到工业生产。TensorFlow也增加了"eager mode",一种新的按运行定义的API,它增加了TensorFlow库的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《深度学习PyTorch中文版》是一本非常实用的书籍,它覆盖了深度学习的各个方面,并详细介绍了如何使用PyTorch来构建神经网络。本书从最基础的线性回归、分类问题开始,逐渐深入探讨了卷积神经网络、循环神经网络、生成对抗网络等高级话题。此外,本书还介绍了数据的预处理、特征工程、模型训练等方面的技巧,让读者能够更好地理解和应用深度学习算法。 本书的优点在于其语言简洁易懂,配合引人入胜的实例和图表,让读者更容易理解和掌握深度学习的知识。同时,本书的代码实现也非常清晰,让读者能够轻松地复现和修改代码,加深对深度学习算法的理解。 总之,《深度学习PyTorch中文版》是一本非常适合初学者和从业者的实用书籍,它能够帮助读者更好地了解和应用深度学习算法,并且提供了丰富的实战经验。如果你正在学习深度学习或者需要深入了解PyTorch框架,那么这本书一定是你的不二之选。 ### 回答2: 《Deep Learning with PyTorch中文版》是一本非常优秀的深度学习教材。PyTorch是Facebook推出的一款开源的深度学习框架,它支持动态图和静态图,有着非常易用的API和灵活的特性,因此它在深度学习社区中受到了广泛的关注和使用。 这本书全面地介绍了PyTorch的使用方法以及深度学习的基础知识。书中的章节安排和内容非常合理,从最基础的张量操作和autopograd介绍到卷积神经网络、循环神经网络和生成对抗网络等高级主题,深入浅出地讲解了深度学习的原理和实现方式。此外,书中还涵盖了实践中最常用的技术,如数据预处理、模型验证和模型训练等内容,使人们能够更加完整地了解深度学习的实际应用。 另外,这本书中还涉及了一些PyTorch的高阶特性,如分布式训练、混合精度训练和自定义操作符等内容,这些内容对于一些具有深度学习基础的人来说将非常有用。同时,书中还提供了大量的实际代码示例和实验案例,帮助读者更好地理解和掌握相关知识。 总之,《Deep Learning with PyTorch中文版》是一本非常优秀的深度学习教材,它深入浅出地介绍了PyTorch的使用方法和深度学习的基础知识,为读者打下扎实的基础,同时也探讨了一些高级主题和实用技巧,可以作为深度学习入门者和高级使用者的参考书。 ### 回答3: PyTorch是一个开源的Python机器学习框架,它被广泛应用于深度学习领域。《Deep Learning with PyTorch(使用PyTorch进行深度学习)》中文版是该领域的经典读物之一,它提供了全面且易于理解的介绍,以便帮助读者掌握PyTorch的理论和实践知识。 该书从基础知识开始,逐步深入介绍了PyTorch的概念、结构和操作。作者将PyTorch的设计和实现详细解释,帮助读者理解其背后的思想和动机。此外,本书还提供了许多实际应用的例子,涵盖了深度学习领域的多个方面,包括自然语言处理、计算机视觉、生成模型等。 在本书中,读者可以学习如何使用PyTorch实现各种常见的深度学习模型,例如卷积神经网络、循环神经网络和深度生成模型等。本书还涵盖了其他重要的深度学习技术,如迁移学习、强化学习和自监督学习等。通过阅读本书,读者可以了解到PyTorch深度学习领域的应用,并了解如何使用它设计和实现自己的深度学习模型。 总之,《Deep Learning with PyTorch(使用PyTorch进行深度学习)》中文版提供了广泛的知识和技能,适合想要学习和应用PyTorch的学生、研究人员和实践者。该书旨在帮助读者充分利用PyTorch的优势,更好地应对深度学习领域的挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值