资讯专栏INFORMATION COLUMN

Keras vs PyTorch:谁是「第一」深度学习框架?

_DangJin / 2376人阅读

摘要:第一个深度学习框架该怎么选对于初学者而言一直是个头疼的问题。简介和是颇受数据科学家欢迎的深度学习开源框架。就训练速度而言,胜过对比总结和都是深度学习框架初学者非常棒的选择。

「第一个深度学习框架该怎么选」对于初学者而言一直是个头疼的问题。本文中,来自 deepsense.ai 的研究员给出了他们在高级框架上的答案。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经网络在不同框架中性能的基准测试结果。目前在 GitHub 上,Keras 有超过 31,000 个 Stars,而晚些出现的 PyTorch 已有近 17,000 个 Stars。

值得一提的是,尽管在 4 月底 PyTorch 在 0.4 版本中已经加入了对于 Windows 的支持,但其对比 Keras 与 TensorFlow 在 Windows 上的稳定性还略有差距。

两大框架的链接:

Keras:https://github.com/keras-team/keras ( https://keras.io/ )

PyTorch:https://github.com/pytorch/pytorch

你想学习深度学习吗?是要将深度学习应用到业务中,还是用深度学习开展副业,抑或只是为了得到一些适合市场需求的技能?无论目标是什么,选择合适的深度学习框架是达到目标的第一步。

我们强烈建议你选择 Keras 或 PyTorch。它们都是非常强大的工具,且不管是学习还是实验都很有乐趣。我们是从教师和学生的角度考虑的。本文作者 Piotr 在企业举办过 Keras 和 PyTorch 研讨会,Rafa ł 则正在学习这两种框架。

简介

Keras 和 PyTorch 是颇受数据科学家欢迎的深度学习开源框架。

Keras 是能够在 TensorFlow、CNTK、Theano 或 MXNet 上运行的高级 API(或作为 TensorFlow 内的 tf.contrib)。Keras 于 2015 年 3 月首次发布,之后即因其易用性和语法简洁性而受到支持,得到快速发展。Keras 是谷歌支持的一款框架。

PyTorch 于 2017 年 1 月对外发布,是专注于直接处理数组表达式的较低级别 API。去年它受到了大量关注,成为学术研究和需要优化自定义表达式的深度学习应用偏好的解决方案。它是 Facebook 支持的一款框架。

在讨论二者的具体细节之前,我们想先说明:对于「哪一个框架更好」这个问题我们没有直接明了的答案。选择哪一个框架最终取决于你的技术背景、需求和期望。本文旨在帮助你更好地了解何时应该选择 Keras 或 PyTorch。

一句话总结

Keras 更容易学习和用标准层进行实验,即插即用;PyTorch 提供一种较低级别的方法,对于更具备数学背景的用户来讲灵活性更强。

所以说为何不用其他框架呢?

本文不讨论选择 TensorFlow 作为推荐深度学习框架的优劣势,因为我们认为 TensorFlow 与 Keras(TensorFlow 的官方高级库)和 PyTorch 相比对于新手不够友好。尽管你可以找到一些 Theano 教程,但它已不再处于活跃开发状态。Caffe 缺少灵活性,Torch 使用 Lua 语言(然而其重写非常难 : ) )。MXNet、Chainer 和 CNTK 目前应用不那么广泛。

Keras vs PyTorch:易用性和灵活性

Keras 和 PyTorch 的运行抽象层次不同。

Keras 是一个更高级别的框架,将常用的深度学习层和运算封装进干净、乐高大小的构造块,使数据科学家不用再考虑深度学习的复杂度。

PyTorch 提供一个相对较低级别的实验环境,使用户可以更加自由地写自定义层、查看数值优化任务。当你可以使用 Python 的全部能量,访问使用的所有函数的核心,则复杂架构的开发更加直接。这自然会以冗长为代价。

下面用在 Keras 和 PyTorch 中定义的简单卷积网络来对二者进行对比:

Keras

model   =   Sequential ( )

model.add ( Conv2D ( 32,   ( 3,   3 ) ,   activation="relu",   input_shape= ( 32,   32,   3 ) ) )

model.add ( MaxPool2D ( ) )

model.add ( Conv2D ( 16,   ( 3,   3 ) ,   activation="relu" ) )

model.add ( MaxPool2D ( ) )

model.add ( Flatten ( ) )

model.add ( Dense ( 10,   activation="softmax" ) )

PyTorch

class   Net ( nn.Module ) :

     def   __init__ ( self ) :

         super ( Net,   self ) .__init__ ( )

         self.conv1   =   nn.Conv2d ( 3,   32,   3 )

         self.conv2   =   nn.Conv2d ( 32,   16,   3 )

         self.fc1   =   nn.Linear ( 16   *   6   *   6,   10 )  

         self.pool   =   nn.MaxPool2d ( 2,   2 )

     def   forward ( self,   x ) :

         x   =   self.pool ( F.relu ( self.conv1 ( x ) ) )

         x   =   self.pool ( F.relu ( self.conv2 ( x ) ) )

         x   =   x.view ( -1,   16   *   6   *   6 )

         x   =   F.log_softmax ( self.fc1 ( x ) ,   dim=-1 )

         return   x

model   =   Net ( )

上述代码片段显示了两个框架的些微不同。至于模型训练,它在 PyTorch 中需要大约 20 行代码,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以进行隐式地处理,而 PyTorch 需要我们指定何时在 CPU 和 GPU 间迁移数据。

如果你是新手,那么 Keras 作为更高级别的框架可能具备明显优势。Keras 确实可读性更强,更加简练,允许用户跳过一些实现细节,更快地构建自己的第一个端到端深度学习模型。但是,忽略这些细节会限制用户探索深度学习流程中每个计算模块内在工作原理的机会。使用 PyTorch 会提供更多机会,来更深入地思考深度学习核心概念,如反向传播以及其他训练过程。

也就是说,Keras 虽然比 PyTorch 简单得多,但它绝不是「玩具」,它是初学者以及经验丰富的数据科学家使用的正经深度学习工具。

例如,在 DSTL 卫星图像特征检测 Kaggle 竞赛中,最优秀的 3 支队伍的解决方案都使用了 Keras,第四名(deepsense.ai 队伍)使用了 PyTorch 和 Keras。

你的深度学习应用所需的灵活性是否超出 Keras 能够提供的灵活性值得考虑。根据你的需求,遵循 Rule of least power,Keras 可能是最完美的解决方案。

结论

Keras:更简练,更简单的 API

PyTorch:更灵活,鼓励用户更深入地理解深度学习概念

Keras vs PyTorch:流行度和可获取学习资源

框架流行度不仅代表了易用性,社区支持也很重要——教程、代码库和讨论组。截至 2018 年 6 月,Keras 和 PyTorch 的流行度不断增长,不管是 GitHub 还是 arXiv 论文(注意大部分提及 Keras 的论文也提到它的 TensorFlow 后端)。根据 KDnuggets 调查,Keras 和 PyTorch 是增长最快的数据科学工具。

尽管两个框架的文档都比较好,但是 PyTorch 的社区支持更强大:其讨论板很值得访问,其中能找到你在文档或 StackOverflow 中找不到的答案。

我们发现基于 Keras 的初学者深度学习课程要比基于 PyTorch 的课程简单,这使得前者更容易受初学者喜欢。Keras 的代码可读性和无与伦比的易用性使它被深度学习爱好者、教师和实力派 Kaggle 冠军广泛使用。

伟大的 Keras 资源和深度学习课程示例,参见 Piotr Migda ł 写的文章《Starting deep learning hands-on: image classification on CIFAR-10》,以及 Keras 创建者 Fran ç ois Chollet 写的书《Deep Learning with Python》。至于 PyTorch 资源,我们推荐官方教程,提供了稍微更有挑战性的综合方法来学习神经网络的内在工作原理。

Keras:大量可获取教程和可重用代码

PyTorch:卓越的社区支持和活跃的开发

Keras vs PyTorch:debug 和内省

Keras 封装了大量计算模块,这使得确定导致问题的代码较为困难。

相比起来,PyTorch 更加详细,我们可以逐行执行脚本。和 debug NumPy 类似,我们可以轻松访问代码中的所有对象,使用 print 语句(或任何标准 Python debug 语句)查看有问题的代码。

Keras 用户创建的标准网络要比 PyTorch 用户创建的标准网络出错的机率小一个数量级。但是一旦出错,则损害巨大,且通常很难定位出错的代码行。PyTorch 提供更直接了当的 debug 经验,而无需关注模型复杂度。此外,当你怀疑哪里出错时,你可以查找 PyTorch repo 查看可读代码。

结论

PyTorch:debug 能力更强

Keras:debug 简单网络的需求的(潜在)频率更低

Keras vs PyTorch:导出模型和跨平台可移植性

在生产环境中,导出和部署自己训练的模型时有哪些选择?

PyTorch 将模型保存在 Pickles 中,Pickles 基于 Python,且不可移植,而 Keras 利用 JSON + H5 文件格式这种更安全的方法(尽管在 Keras 中保存自定义层通常更困难)。另一方面,Keras 也有 R 语言接口,如果你合作的数据分析师团队使用 R 语言,那么你会用得上它。

Keras 是在 TensorFlow 上运行的,这意味着它可以通过 TensorFlow for Mobile 和 TensorFlow Lite 享有更多选择来部署到移动平台。你编写的 web 应用也可以通过 TensorFlow.js 或 Keras.js 部署到网页上。例如,你可以看看这个深度学习驱动的浏览器插件,它可以检测密集恐惧症触发因素:https://github.com/cytadela8/trypophobia。

导出 PyTorch 模型的过程由于其 Python 代码的限制而更加费力,目前人们广泛采用的方法是首先使用 ONNX 将 PyTorch 模型转换为 Caffe2 形式。

Keras 获胜:它有更多的部署选项(直接通过 TensorFlow 后端),模型导出也更简单。

Keras vs PyTorch:性能篇

Donald Knuth 有一句名言:不成熟的优化是编程中所有邪恶(至少大部分)的根源。

在大多数情况下,基准测试中的速度差异不应该成为框架选择的主要标准——特别是在学习阶段。GPU 时间比其数据科学家的时间显然便宜得多。而且,在学习过程中,性能瓶颈大多是由失败的实现、未优化的网络和数据加载造成的,而不是框架本身的运行速度。当然,为了完整地进行比较,我们还是要介绍这一方面。在这里我们推荐两个性能对比结果:

Wojtek Rosi ń ski 的《TensorFlow, Keras and PyTorch Comparison》:https://wrosinski.github.io/deep-learning-frameworks/

微软的《Comparing Deep Learning Frameworks: A Rosetta Stone Approach》:https://github.com/ilkarman/DeepLearningFrameworks/

PyTorch 和 TensorFlow 一样快,在循环神经网络上或许更快,相比之下,Keras 通常速度较慢。正如第一篇文章的作者指出的那样:大多数情况下,高性能框架(即 PyTorch 和 TensorFlow)的计算效率优势不敌快速开发环境以及 Keras 提供的实验易用性。

就训练速度而言,PyTorch 胜过 Keras

Keras vs PyTorch:对比总结

Keras 和 PyTorch 都是深度学习框架初学者非常棒的选择。如果你是数学家、研究员或者想要理解模型的本质,那么可以考虑选择 PyTorch。在需要更先进的定制化和 debug 时(例如用 YOLOv3 做目标检测或者带有注意力的 LSTM ) ,或者当我们需要优化数组表达式而不是神经网络时(例如矩阵分解或者 word2vec 算法),PyTorch 真的很棒。

如果你想要一个即插即用的框架,Keras 无疑是更简单的选择:快速构建、训练、评估模型,不需要在数学实现上花费太多的时间。

深度学习的核心概念知识是可转移的。一旦你掌握了一个环境中的基础知识,你就能学以致用,掌握新的深度学习库。

我们鼓励你在 Keras 和 PyTorch 中都尝试下简单的深度学习模型。

原文链接:https://deepsense.ai/keras-or-pytorch/

声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群

商业智能与数据分析群

兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识

QQ群:81035754

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/4790.html

相关文章

  • ArXiv最受欢迎开源深度学习框架榜单:TensorFlow第一

    摘要:但年月,宣布将在年终止的开发和维护。性能并非最优,为何如此受欢迎粉丝团在过去的几年里,出现了不同的开源深度学习框架,就属于其中典型,由谷歌开发和支持,自然引发了很大的关注。 Keras作者François Chollet刚刚在Twitter贴出一张图片,是近三个月来arXiv上提到的深度学习开源框架排行:TensorFlow排名第一,这个或许并不出意外,Keras排名第二,随后是Caffe、...

    trilever 评论0 收藏0
  • PyTorch和TensorFlow到底哪个更好?看看一线开发者怎么说

    摘要:我认为对机器学习开发者来说,是一个了不起的工具集。这个帖子发出后得到了很多机器学习研究者和开发者的关注,他们纷纷跟贴谈论自己的想法和经验不只是关于和,讨论中还涉及到更多工具。 Theano、TensorFlow、Torch、MXNet 再到近日比较热门的 PyTorch 等等,深度学习框架之间的比较一直以来都是非常受人关注的热点话题。机器之心也曾发表过多篇相关的介绍和对比文章,如《主流深度学...

    coordinate35 评论0 收藏0
  • 微软开源的深度学习模型转换工具MMdnn

    摘要:是微软开源的用于不同深度学习框架和的模型之间互相转换的工具,通过模型的中间表示来完成不同框架模型之间的转换。 MMdnn简介在工业街和学术界中,开发者或者研究人员可以选择多种深度学习框架来构建模型,每种框架有自己特有的网络结构定义以及模型保存格式,这种框架之间的鸿沟阻碍了不同框架模型之间的操作。MMdnn是微软开源的用于不同深度学习框架(Caffe, Keras, MXNet, Tensor...

    高璐 评论0 收藏0
  • 23种深度学习库排行榜:TensorFlow最活跃、Keras最流行

    摘要:我们对种用于数据科学的开源深度学习库作了排名。于年月发布了第名,已经跻身于深度学习库的上半部分。是最流行的深度学习前端第位是排名较高的非框架库。颇受对数据集使用深度学习的数据科学家的青睐。深度学习库的完整列表来自几个来源。 我们对23种用于数据科学的开源深度学习库作了排名。这番排名基于权重一样大小的三个指标:Github上的活动、Stack Overflow上的活动以及谷歌搜索结果。排名结果...

    princekin 评论0 收藏0
  • 从硬件配置到框架选择,请以这种姿势入坑深度学习

    摘要:幸运的是,这些正是深度学习所需的计算类型。几乎可以肯定,英伟达是目前执行深度学习任务较好的选择。今年夏天,发布了平台提供深度学习支持。该工具适用于主流深度学习库如和。因为的简洁和强大的软件包扩展体系,它目前是深度学习中最常见的语言。 深度学习初学者经常会问到这些问题:开发深度学习系统,我们需要什么样的计算机?为什么绝大多数人会推荐英伟达 GPU?对于初学者而言哪种深度学习框架是较好的?如何将...

    marek 评论0 收藏0

发表评论

0条评论

_DangJin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<