属于动态图的未来:横向对比PyTorch与Keras

栏目: Python · 发布时间: 7年前

内容简介:属于动态图的未来:横向对比PyTorch与Keras

PyTorch 对机器学习领域的影响正在不断扩大,人们在使用中也在不断将其和其他机器学习框架进行对比。最近,Marc Schmidt 在 Reddit 上撰文对 Keras 和 PyTorch 进行了全面的对比。作者认为,PyTorch 在版本管理和调试等方面具有很大优势。

我可以根据自己作为软件工程师的经验(10 年以上)来给你一些答案。我也参与过很多开源项目,还是几十个开源库的作者,这些库都有成千上万的收藏量和数百万的安装量,因此我对于双方(作者和用户)在私人和商业领域的应用都相当了解。另外,很多人问我为什么使用的是 aetros.com Keras 而非 Pytorch/xy。

让我们定义一些属性来定义库 X 的好坏:

属于动态图的未来:横向对比PyTorch与Keras

1 星 - 低于平均水平,2 星 - 平均水平,3 星 - 高于平均水平

我来详细解释下这张表。

版本管理

当你使用库(无论开源的还是商业的)并想继续使用该库来开发一个应用时,非常重要的一点是这其中不会有隐藏的变化,而且你的应用程序不会在你更新库(以得到想要的功能或 bug 修复)时发生中断。最坏的情况是,当你更新第三方库时出现了一些 bug,你就得开始进行调试。这不仅会花费很多时间而且令人讨厌。所以,重要的是你要知道库更新前后的变化。最好的情况是,库使用了依据 semver(http://semver.org/)的语义版本控制,这确保了你在更新较小的补丁版本时不会发生中断(至少是在尝试,并不总能行,但这里的意图是好的)。

至少,你标记的每个版本都需要一份更新日志,这样你就能看到 bug(如有)是否已被修复或者一个新功能(如需要)是否已得到实现。我在过去两年里用 Keras 的次数越来越多,并发现了很多被标记好的版本就简单地被称作「新流程发布(New PiPy release)」。可以想象,一个普通的开发者完全不会知道该标签版本发生了哪些变化。这实际上是 Keras 在行业的专业使用方面尚未完备的其中一个原因,同时它对于优秀且使用广泛的库的质量标准也很高。用了 Keras 2 之后,该作者表明他所描述的版本开始变得越来越好了。然而相比于 Pytorch,它仍然给人感觉像是一个自娱自乐的业余项目。参见 https://github.com/fchollet/keras/releases 与 https://github.com/pytorch/pytorch/releases。在看到这样一个详细的 Pytorch 版本说明之后我几乎(幸福地)要哭了。当你在一个专业的环境(对于行业来说,时间就是金钱)中处理它时,这将是你最喜欢的。

在版本管理上,我给 Keras 1 星,因为它的版本管理让我恶心了好几次;我给 Pytorch 3 颗星,因为你可以看到在它后面有一个团队,他们投入了更多的精力来使用户保持信息灵通。对于 Keras,编写这种版本说明更像是一个令人讨厌的流程。我也跟 PyTorch 的一位作者 Adam Paszke 聊了一下,他说他们很注重这个环节,这让我有信心在自己的项目中使用它。

调试

好吧,这也是我喜欢 Pytorch 的一点。写代码意味着总是发现并修复 bug。你的(隐藏在库和概念后面的)代码越不可思议,理解 bug 并找出对应的错误代码行与解决方案的过程就越令你感到痛苦。像 Theano 和 Tensorflow 那样的静态图形库在寻找问题——「不能将 xy 应用于一个非 2D 或 3D 的张量中」或「输入 (233, 3, 44, 55) 与 (233, 3, 55, 44) shape 不相容」——根源方面表现得非常笨拙。你需要检查你的模型并在大脑中计算张量的 shape,也许可以通过注释掉一些层来找到原因。

有了像 Pytorch 一类的动态图像,你就可以在堆栈跟踪中看到哪一行代码导致了错误。你甚至可以在调试器中停掉解释器并看看某个层会产生什么。通过采用断点并逐句检查代码,你发现上述 bug 的速度就可以提高 100 倍。在你遇到 bug 时,这几乎就成为了纯粹的享受,因为你已经知道「只要让调试器高速运行就可以在一秒内解决这个小 bug」。这实际上令我回想起自己刚开始使用真正交互式的、带断点和运行时评估等功能的调试器的日子,那是一种全新的效率体验。其中唯一的限制是你在代码中所建立的抽象逻辑。如果你不能用调试器和 IDE 来调试它,那么你的代码要么是太糟糕要么是过于抽象。

开发体验

在这两个库中,你的深度神经网络运行得都很快。Pytorch 还没有如 Keras 那样高层次的抽象(带有回调函数),而是在网络之外训练抽象等功能。所以你还是需要写一些样板文件。然而,这里(https://github.com/ncullen93/torchsample)Keras 提供的 API 基本上与 Pytorch 的相同。Pytorch 还很青涩,你会遇到一些 DX 方面的问题,比如「如何让卷积层变平,使它与隐藏层兼容」(提示:仅仅「.add(Flatten())」是无法解决的,但我相信 Pytorch 开发者们正在想办法解决它。这是我给 Pytorch 2 颗星而给 Keras 3 颗星的原因。Keras 在开发经验(除了调试)方面非常出色。你可以得到很好的早期效果且能够进行傻瓜式层编写。

上线时间

当我在谈论库的上线时间时其实是在说:我们的开发人员需要多长时间来理解库、发现/修复漏洞、受到库的启发(最后一点尤其重要,因为一个开发者在燃起了对 工具 的使用兴致后,其开发速度通常会提升 2-5 倍)。两个库都很好,尽管 Keras 出现的时间更早且有更多的网上教程和文档。所以 Pytorch 就比 Keras 少 1 颗星。

社区支持

这个问题很棘手。什么是社区?对于像 Pytorch 和 Keras 之类较小的库,得有一些对其进行宣传并(即使是对垃圾问题)提供有价值的解答以及帮助修复社区 bug 的人,这点非常重要。如果你像 Keras 那样自娱自乐,那么要搞定所有问题是非常困难的。你可以在 Keras 的问题追踪器中很清楚地看到 2,500 个开放的问题,以至于该项目完全不堪重负。相比之下,Pytorch 是由一个 Facebook 的工程师团队进行维护,你可以看到那里的问题更少且社区支持更加活跃。如果你在 Keras 中遇到一个问题,可能要等上几周/月的时间才能(如果可能)得到解决方案。

商业支持

Pytorch 太新了,几乎还没有人提供商业支持。我相信连 Facebook 都不会提供任何资金支持。Keras 则有些不一样。已经有很多使用 Tensorflow/Theano/Keras 来提供开发服务的公司。所以,如果你遇到一个问题并想用钱来解决,则最好用 Keras/Tensorflow。

长期发展

我相信在 Facebook 和谷歌对两个项目的支持下,你大可以说二者会在未来几年内依然存在。尽管我真的希望 Keras 可以得到一支谷歌团队或一个开源组织的支持,这样它就不会仅仅因为大量开放且不断涌入的问题而死掉。

从长远来看,静态图会成为过去,而相对便于使用的库会得到越来越多的使用,因为在正常的软件开发领域,调试和上市时间对于行业的可维护性(机器学习正在朝此方向行进)来说是最重要的。在所有这三个类别中,像 PyTorch 那样的动态图像都将绽放光芒。

你可以对任何任务同时部署 Keras 和 PyTorch。你对谁了解得更深,那么你用它编写异乎寻常的代码就会更快。虽然我倾向于认为 Pytorch 在编写非同寻常的事物方面更加灵活,而你可能认为层代码的编写就不是这样。

结论

我现在更喜欢 Keras,因为我上一次试用 PyTorch 时,它还有几个 GPU 方面的问题,还有另一些问题我没有克服。在 Keras 上,我的项目已经运行了数月,其效果相当不错,尽管我在运行时间更久(并非几天时间)的项目中看到了一些 bug 报告,而且使用静态图的后端来调试 Keras 相当麻烦。在接下来的几个月里,如果 PyTorch 变得越来越稳定,我肯定会转投 PyTorch 阵营。然而我还想试试 Caffe2。


以上所述就是小编给大家介绍的《属于动态图的未来:横向对比PyTorch与Keras》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

A Philosophy of Software Design

A Philosophy of Software Design

John Ousterhout / Yaknyam Press / 2018-4-6 / GBP 14.21

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first ......一起来看看 《A Philosophy of Software Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具