TensorFlow vs PyTorch 4: 自动微分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow vs PyTorch 4: 自动微分相关的知识,希望对你有一定的参考价值。

参考技术A

使用反向传播法训练神经网络时,模型的参数依据损失函数与对应参数的梯度来调整,即:

自动微分 是机器学习工具包必备的工具,它可以自动计算整个计算图的微分。

PyTorch 内建了一个叫做 torch.autograd 的自动微分引擎,该引擎支持的数据类型为:浮点数Tensor类型 ( half, float, double and bfloat16) 和复数Tensor 类型(cfloat, cdouble)

PyTorch 中与自动微分相关的常用的Tensor属性和函数:

TensorFlow 通过 tf.GradientTape API来自动追踪和计算微分,GradientTape,翻译为微分带,Tape有点儿历史上磁带机的味道,即在Tape上记录下所有的计算和计算结果。
tf.GradientTape 在tf.Variable而非tf.Tensor上计算,因为在TensorFlow中,tf.Tensor为不可变对象,tf.Variable为可变对象;通常 用tf.Variable来存储模型参数
tf.Variable 有一个trainable属性,该属性tf.Tensor没有,类似PyTorch Tensor的requires_grad, 即告知自动微分引擎是否追踪该tf.Variable,并自动计算该tf.Variable的微分。
范例:

从上述可以看到,TensorFlow的自动微分实现方式与PyTorch大不相同,而且 没有把参数和参数的微信封装成一个对象,这点非常不User-Friendly,或者说封装的不好
为了方便实现模型,模型的参数,与模型参数的微分,TensorFlow又提供了另外一套机制: 模型的微分(Gradients with respect to a model) , 意思是:TensorFlow开发团队也知道了用tf.Variable实现模型参数,然后用tape.gradient()方法计算微分,tf.Variable和它对应的微分是分离的,是没有封装好的,这种方式对开发者不友好,所以,TensorFlow开发者团队对于构建模型的基础类: tf.Module 或者它的子类 ( layers.Layer , keras.Model ),提供了一个 Module.trainable_variables 的属性,该属性把模型参数都封装好了,使用起来比较方便。不过对应微分还是没封装,坚持自己的个性...对于我们开发者,还是选择遵循...
范例:

参考资料:

开发 | PyTorch vs. TensorFlow月度使用体验总结

AI科技评论按:日前,英伟达深度学习项目实习生Dominic Monn在medium上发文总结了他使用PyTorch和TensorFlow的一些体会,在文章中,他从安装、使用、文件、社群等方面简单对比了这两种框架。

他曾是TensorFlow用户,加入英伟达后开始使用PyTorch,下面是的他的一些使用体验:

安   装

PyTorch安装起来很容易,也很直接,大家可以通过PIP来安装,也可以直接选择源码安装。PyTorch也提供Docker图,大家可以在项目中把Docker图用作base image。

PyTorch并不像TensorFlow一样已经指定好CPU和GPU,虽然它的这一特征可以让安装更加简单,但如果在项目中想要同时支持GPU和CPU,将会产生更多代码。

使   用

PyTorch提供非常Python化的API接口,这与TensorFlow有很大差别,TensorFlow需要先定义所有的张量和图,然后再执行相应的会话操作。虽然PyTorch的这一特性使得代码变多了,但会更加清晰。

PyTorch图必须定义在从PyTorch nn.Module类继承过来的类中,运行图的时候会调用forward()函数,通过这种“约定优于配置”(convention over configuration)的方式,图的位置一直处于可知状态,也不会在余下的代码中定义变量。

你可能会需要一段时间来适应PyTorch中的这种“新”方法,不过如果你以前在深度学习的研究之外用过Python,这种方法对你来说会很直观。

也有一些人这样评价——与TensorFlow相比,PyTorch在许多模型上都有更加优秀的表现。

文   件

PyTorch的大部分文档都是完整的,我每次都能成功找到函数或模块的定义。TensorFlow所有的函数都在一个页面,而PyTorch不同于TensorFlow,每个模块只用一个页面。如果你要用Google找一个函数,这会有点困难。

社   群

很明显,PyTorch社群不像TensorFlow那么庞大,但很多人都喜欢在业余时间用PyTorch,即使他们工作时使用的是TensorFlow。我认为,一旦PyTorch发布正式版,PyTorch社群会变得更大。在目前,仍然很难找到非常精通PyTorch的人。

不过它的社群也足够大了,如果在官方论坛上提出问题,通常很快就能得到解答。许多优秀神经网络模型也有PyTorch的操作样例了。

工具和辅助功能

虽然PyTorch能提供相当多的工具,但仍然缺少一些非常有用的部分。例如它没有类似于TensorBoard这种非常有用的工具,这会导致很难进行可视化。

此外它也缺失一些常用的辅助功能,比起TensorFlow来说需要我们自己写更多的代码。

总   结

PyTorch是TensorFlow之外一个非常好的选择,虽然 PyTorch仍在测试阶段,我希望在可用性、文件和性能方面它能有更多的改变和进步。PyTorch非常Python化,用起来很容易。它的社群活跃,文件齐全,据称它比TensorFlow更快。然而,它的社群比起TensorFlow来说,仍然只是九牛一毛,并且缺失了诸如 TensorBoard等一些非常有用的工具。

AI科技评论注,除了Dominic Monn近日对这两种框架的对比, 斯坦福大学计算机科学博士生Awni Hannun也曾发文撰写了这两个框架之间的主要差异,详情可以参见:

via:medium;AI科技评论编译整理。

—————  AI 科技评论招人啦!  —————

我们诚招学术编辑 1 名(全职,坐标北京)

你即将从事的工作内容:

  • 报道海内外人工智能相关学术会议,形成具有影响力的报道内容;

  • 采访高校学术青年领袖,输出人工智能领域的深度观点;

  • 跟进国内外学术热点,深入剖析学术动态;

我们希望你是这样的小伙伴:

  • 英语好,有阅读英文科技网站的习惯;

  • 兴趣广,对人工智能有关注及了解;

  • 态度佳,有求知欲,善于学习;

欢迎发送简历到 guoyixin@leiphone.com

—————  给爱学习的你的福利  —————

随着大众互联网理财观念的逐步普及,理财规模随之扩大,应运而生的智能投顾,成本低、风险分散、无情绪化,越来越多的中产阶层、大众富裕阶层已然在慢慢接受。王蓁博士将以真实项目带你走上智能投顾之路,详情请识别下图二维码或点击文末阅读原文~

————————————————————


以上是关于TensorFlow vs PyTorch 4: 自动微分的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch vs. TensorFlow月度使用体验总结

开发 | PyTorch vs. TensorFlow月度使用体验总结

PyTorch VS TensorFlow:细数两者的不同之处

深度学习之 Keras vs Tensorflow vs Pytorch 三种深度学习框架

深度学习之 Keras vs Tensorflow vs Pytorch 三种深度学习框架

深度学习之 Keras vs Tensorflow vs Pytorch 三种深度学习框架的差异