当前位置: 首页 > 科技观察

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

时间:2023-03-17 12:33:14 科技观察

PyTorch在机器学习领域的影响力正在扩大,人们不断将其与其他正在使用的机器学习框架进行比较。最近,MarcSchmidt在Reddit上写了一篇Keras和PyTorch的综合比较。笔者认为PyTorch在版本管理和调试方面有很大的优势。我可以根据我自己作为软件工程师(10年以上)的经验给你一些答案。我也参与了很多开源项目,是几十个开源库的作者,拥有数万个收藏和数百万的安装量,所以我非常尊重私人和用户双方(作者和用户)商业领域的应用是众所周知的。另外,很多人问我为什么使用aetros.comKeras而不是Pytorch/xy。让我们定义一些属性来定义库X的好坏:1星-低于平均水平,2星-平均水平,3星-高于平均水平让我详细解释一下这个表。版本管理当您使用一个库(无论是开源的还是商业的)并且想继续使用该库来开发应用程序时,非常重要的是没有隐藏的更改并且您的应用程序不会在您更新库时发生变化(以获得所需的功能或错误修复)。最坏的情况是,当您更新第三方库时出现一些错误,您必须开始调试。这不仅耗时而且烦人。因此,了解库更新前后发生的变化非常重要。最好的情况是,该库根据semver(http://semver.org/)使用语义版本控制,这确保您在更新较小的补丁版本时不会中断(至少它正在尝试,并不总是有效,但这里的意图是好的)。至少,您需要为您标记的每个版本创建一个更新日志,这样您就可以查看是否已修复错误(如果有)或是否已实现新功能(如果需要)。在过去的两年里,我越来越多地使用Keras,并且看到了很多标记为“NewPiPyreleases”的版本。可以想象,一个普通的开发者是不会知道标签版本发生了什么变化的。这其实也是Keras还没有准备好在业界专业使用的原因之一,同时它也有一个优秀且被广泛使用的库的高质量标准。在使用Keras2之后,作者表明他所描述的版本开始变得越来越好。不过和Pytorch相比,感觉还是属于自娱自乐的sideproject。请参阅https://github.com/fchollet/keras/releases和https://github.com/pytorch/pytorch/releases。看到如此详细的Pytorch发行说明后,我几乎(高兴地)哭了。当您在专业环境中处理它时,这将是您的最爱(对于行业而言,时间就是金钱)。在版本管理上,我给Keras1星,因为它的版本管理让我恶心了好几次;我给Pytorch3星,因为你可以看到它背后有一个团队在让用户了解情况方面付出了更多的努力。对于Keras来说,写这种releasenotes更是一个烦人的过程。我还和PyTorch的作者之一AdamPaszke聊天,他说他们很重视这部分,这让我有信心在自己的项目中使用它。调试嗯,这是我喜欢Pytorch的地方之一。编写代码意味着始终查找和修复错误。你的代码(在库和概念背后)越奇怪,理解bug并找到相应的错误代码行和解决方案就越痛苦。Theano和Tensorflow等静态图形库查找问题-“无法将xy应用于非2D或3D的张量”或“输入(233,3,44,55)与(233,3,55,44)形状不兼容”-在根端非常笨拙。你需要检查你的模型并在你的头脑中计算张量的形状,也许你可以通过注释掉一些层来找到原因。使用像Pytorch这样的动态图像,您可以在堆栈跟踪中看到是哪一行代码导致了错误。你甚至可以在调试器中停止解释器,看看某个层产生了什么。通过采取断点和单步执行代码,您可以以100倍的速度找到上述错误。当你遇到一个错误时,这几乎是一种纯粹的享受,因为你已经知道“只要把调试器放在高处,你就可以在一秒钟内修复这个小错误”。它实际上让我回到了我第一次开始使用带有断点和运行时评估等的真正交互式调试器的日子。这是一种全新的生产力体验。唯一的限制是您在代码中构建的抽象逻辑。如果你不能用调试器和IDE调试它,那么你的代码要么太糟糕要么太抽象。开发经验在这两个库中,你的深度神经网络运行得都非常快。Pytorch目前还没有像Keras那样的高层抽象(有回调函数),而是网络外的训练抽象等功能。所以你仍然需要写一些样板。不过,这里(https://github.com/ncullen93/torchsample)Keras提供的API与Pytorch基本相同。Pytorch还很年轻,你会遇到一些DX问题,比如“如何展平卷积层,使其与隐藏层兼容”(提示:仅“.add(Flatten())”无法解决,但我相信Pytorch开发人员正在弄清楚如何修复它。这就是为什么我给Pytorch2星和Keras3星。Keras在开发体验方面非常出色(除了调试)。您可以获得良好的早期效果和为傻瓜编写图层的能力.上线时间当我谈到库的上市时间时,我实际上是在说:我们的开发人员需要多长时间才能了解库、查找/修复错误、从库中获得灵感(***这一点尤其重要,因为当开发人员对使用该工具感到兴奋时,他们的开发速度通常会快2-5倍。)这两个库都很好,尽管Keras更老并且有更多在线教程和文档。因此Pytorch比Keras少1星.社区支持是个棘手的问题。什么是社区?垃圾问题)提供有价值的答案和帮助修复社区错误的人非常重要。如果像Keras一样自娱自乐,很难搞定所有的问题。您可以在Keras问题跟踪器中找到它们清楚地看到2,500个未解决的问题,该项目完全不堪重负。相比之下,Pytorch由Facebook的工程师团队维护,你可以看到问题更少,社区支持更活跃。如果您在Keras中遇到问题,可能需要数周/数月才能找到解决方案(如果可能)。商业支持Pytorch太新了,几乎还没有人提供商业支持。我相信即使是Facebook也不会提供任何资金支持。Keras有点不同。已经有很多公司使用Tensorflow/Theano/Keras提供开发服务。所以,如果你遇到问题想花钱解决,Keras/Tensorflow是最好的选择。长期发展我相信,在Facebook和谷歌对这两个项目的支持下,你可以有把握地说,这两个项目在未来几年仍将存在。虽然我很希望Keras能够得到Google团队或者开源组织的支持,这样它才不会因为大量的开放和涌入的问题而死掉。从长远来看,静态图会成为历史,相对好用的库会被越来越多地使用,因为在正常的软件开发领域,调试和上市时间对于可维护性很重要行业(机器学习正朝着这个方向前进)是最重要的。在所有这三个类别中,像PyTorch这样的动态图像都会大放异彩。您可以为任何任务同时部署Keras和PyTorch。你越了解谁,你就可以越快地用它编写奇异的代码。虽然我倾向于认为Pytorch对于编写重要的东西更灵活,但您可能认为层代码不是。结论我现在更喜欢Keras,因为上次我尝试PyTorch时,它有几个GPU问题,还有一些我还没有克服。在Keras上,我的项目已经运行了好几个月,尽管我在运行时间更长(不是几天)的项目中看到了一些错误报告,并且使用静态图形后端来调试Keras相当麻烦。在接下来的几个月里,如果PyTorch越来越稳定,我一定会转投PyTorch阵营。不过我也想试试Caffe2。原文:https://www.reddit.com/r/MachineLearning/comments/6grw9t/n_early_access_to_deep_learning_book_by_keras/id:almosthuman2014)》】点此查看作者更多好文