Keras或PyTorch作为您的第一个深度学习框架

你想学习深度学习吗?无论您是想开始将其应用于您的业务,建立您的下一个项目,还是仅仅获得当下热门的技能 – 选择合适的深度学习框架来学习是实现目标的关键第一步。

我们强烈建议您选择Keras或PyTorch。这些功能强大的工具可让您学习和实验。我们从老师和学生的角度都了解他们。

介绍

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

  • Keras是一种高级API,可以在TensorFlow,CNTK,Theano或MXNet上运行(或者在TensorFlow中运行tf.contrib)。自2015年3月首次发布以来,它的易用性和语法简单性得到了青睐,促进了快速发展。它得到了Google的支持。

  • PyTorch于2016年10月发布,是一款专注于直接处理数组表达式的低级API。它在去年获得了巨大的兴趣,成为学术研究的首选解决方案,以及需要优化定制表达的深度学习应用。它受Facebook支持。

在我们讨论这两个框架的细节(在这个Reddit主题中有详细描述)之前,我们希望先发制人让你失望 – 对’哪个更好?’没有直接的答案。选择最终归结于您的技术背景,需求和期望。本文旨在让您更好地了解您应该选择哪一个作为第一个框架。

TL; DR:

以即插即用的精神,Keras可能更容易进入标准图层并进行实验。

PyTorch为更具数学倾向的用户提供了更低层次的方法和更多的灵活性。

好吧,但为什么没有其他框架?

本文不会讨论选择纯TensorFlow作为您的第一个深度学习框架的优缺点,因为我们认为与Keras(TF的官方高级库)和PyTorch相比,TensorFlow不太适合初学者。虽然您可能会找到一些Theano教程,但它不再处于积极的发展阶段。Caffe缺乏灵活性,而Torch使用Lua(虽然它的重写太棒了:))。MXNet,Chainer和CNTK目前尚未广泛流行。

Keras与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比赛中,最好的三支队伍在他们的解决方案中都使用了Keras,而deepsense.ai队(第四名)使用了PyTorch和(较少的)Keras组合。

值得考虑的是,你的深度学习的应用是否需要灵活性超过纯Keras所提供的灵活性。根据您的需求,keras可能只是 the rule of least power甜蜜点。

总结

  • Keras – 更简洁,更简单的API

  • PyTorch – 更灵活,鼓励更深入地了解深度学习概念

Keras与PyTorch:社区人气和获取学习资源

框架的普及不仅是其可用性的代表。这对于社区支持也很重要 – 教程,带有工作代码的存储库和讨论组。截至2018年6月,Keras和PyTorch在GitHub和arXiv论文上都受到越来越多的欢迎(请注意,大多数提及Keras的论文也提及其TensorFlow后端)。根据KDnuggets的调查,Keras 和 PyTorch是增长最快的数据科学工具。

虽然这两个框架都有令人满意的文档,但PyTorch享有更强大的社区支持 – 如果您遇到困难(您将陷入困境),它们的讨论板是访问的好地方,而文档或StackOverflow不会为您提供所需的答案。

有趣的是,我们在给定的网络架构上发现了具有注释的初学者级别的深度学习课程,这些课程对于Keras来说比PyTorch更容易实现,使得Keras对于初学者更容易访问。代码的可读性和Keras提供的无与伦比的实验易用性可能会使其深受广大深度学习爱好者,教师和铁杆Kaggle获奖者的广泛欢迎。

大量的Keras资源和深度学习课程的例子,请参阅 “Starting deep learning hands-on: image classification on CIFAR-10“ 和Keras 的创造者François Chollet编写的 “Deep Learning with Python” 一书。对于PyTorch资源,我们推荐官方教程,它提供了一个更具挑战性,更全面的方法来学习神经网络的内部工作。

总结

  • Keras – 丰富的教程和可重复使用的代码

  • PyTorch – 卓越的社区支持和积极的发展

Keras与PyTorch:调试与代码检查

Keras在抽象中封装了大量计算块,因此难以确定导致bug的确切代码。
PyTorch作为更为详细的框架,可以让我们逐行执行我们的脚本。这就像调试NumPy一样 – 我们可以轻松访问代码中的所有对象,并且可以使用打印语句(或任何标准的Pythonic调试)来查看运行失败的位置。
创建标准网络的Keras用户比PyTorch用户出错的机会少一个数量级。但是一旦出现问题,它就会受到很大的伤害,而且往往很难找到出错的实际代码行。无论模型的复杂性如何,PyTorch都提供了更加直接的,不绕弯的调试体验。此外,如果有疑问,您可以随时查找PyTorch repo以查看其可读代码。

总结

  • PyTorch – 更好的调试功能

  • Keras – (可能)不太需要调试简单网络

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

在生产中导出和部署训练的模型有哪些选择?

PyTorch将Pickles中的模型保存为基于Python的,不可移植的,而Keras利用JSON + H5文件的更安全的方法(尽管在Keras中保存自定义层通常更困难)。Keras支持R,以防需要使用R语言与数据分析师团队进行协作。

在Tensorflow上运行,Keras通过TensorFlow for Mobile和TensorFlow Lite享有更广泛的选择,可用于部署到移动平台。您可以使用TensorFlow.js或keras.js部署您的酷Web应用程序。作为一个例子,请看这个由Piotr和他的学生开发的深度学习驱动的浏览器插件,用于检测trypophobia触发器。

导出PyTorch模型由于其Python代码而导致更多的开销,目前广泛推荐的方法是首先将您的PyTorch模型转换为使用ONNX的Caffe2。

总结

  • Keras – 更多的部署选项(直接并且通过TensorFlow后端),更简单的模型导出。

Keras与PyTorch:性能

Donald Knuth说:

不成熟的优化是编程中所有邪恶(或至少大部分)的根源。

在大多数情况下,速度基准的差异不应该成为选择框架的主要标准,特别是正在学习时。GPU时间比数据科学家的时间便宜得多。而且,在学习的时候,性能瓶颈将由实验失败,网络未优化和数据加载造成; 而不是原始的框架速度。然而,为了完整性,我们不得不触及这个问题。我们推荐这两个比较:

  • TensorFlow, Keras and PyTorch comparisonby Wojtek Rosiński

  • Comparing Deep Learning Frameworks: A Rosetta Stone Approachby Microsoft

PyTorch速度与TensorFlow一样快,对于Recurrent Neural Networks可能更快。Keras一贯较慢。正如第一个比较的作者所指出的那样,高性能框架(即PyTorch和TensorFlow)的计算效率的提高在大多数情况下将超过快速开发环境以及Keras提供的实验易用性。

总结

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

Keras与PyTorch:结论

Keras和PyTorch都是您第一个学习的深度学习框架的绝佳选择。
如果你是一位数学家,研究人员或者倾向于理解你的模型真正在做什么,那么就考虑选择PyTorch。它真的很优秀,特别是当你需要更高级的定制(及其调试)(e.g. object detection with YOLOv3 or LSTMs with attention),或者当我们需要优化除神经网络以外的数组表达式(例如矩阵分解或word2vec算法)时。

如果您需要即插即用框架,Keras毫无疑问是更简单的选择:快速构建,训练和评估模型,而无需花费太多时间在数学实现细节上。

关于深度学习的核心概念的知识是可以迁移的。一旦掌握了一个环境中的基础知识,就可以将它们应用到其他地方,并在您转换到新的深度学习库时可以立马上手。

欢迎访问我爱计算机视觉(www.52cv.net),获取更多计算机视觉与机器学习技术信息。

Keras与PyTorch全方位比较 哪一个深度学习框架更适合初学者?相关推荐

  1. Keras vs PyTorch:谁是第一深度学习框架?

    「第一个深度学习框架该怎么选」对于初学者而言一直是个头疼的问题.本文中,来自 deepsense.ai 的研究员给出了他们在高级框架上的答案.在 Keras 与 PyTorch 的对比中,作者还给出了 ...

  2. 是选择Keras还是PyTorch开始你的深度学习之旅呢?

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 135 篇文章,本文大约 7000 字,阅读大约需要 20 分钟 原文 ...

  3. 除了TensorFlow、PyTorch,还有哪些深度学习框架值得期待?

    分布式技术是深度学习技术的加速器. 同时利用多个工作节点,分布式地.高效地训练出性能优良的神经网络模型,能够显著提高深度学习的训练效率.进一步增大其应用范围. <首席AI架构师--分布式高性能深 ...

  4. 除了 Tensorflow、PyTorch ,还有哪些深度学习框架值得期待?

    分布式技术是深度学习技术的加速器. 同时利用多个工作节点,分布式地.高效地训练出性能优良的神经网络模型,能够显著提高深度学习的训练效率.进一步增大其应用范围. <首席AI架构师--分布式高性能深 ...

  5. 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?

    人工智能AI与大数据技术实战  公众号: weic2c 开源的深度学习神经网络正步入成熟,而现在有许多框架具备为个性化方案提供先进的机器学习和人工智能的能力.那么如何决定哪个开源框架最适合你呢?本文试 ...

  6. 如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)——part01

    整体学习目标 建立属于你自己的深度学习框架 Python创建线性回归模型,L1损失函数,L2损失函数 参数初始化 掌握梯度下降算法,创建优化器函数 学会设置学习率以避免梯度爆炸 掌握多个常用激活函数, ...

  7. 4款深度学习框架简介,初学者该如何选择?

    导读:近几年,随着深度学习爆炸式发展,在人工智能领域除了理论方面的突破外,还有基础架构的突破,它们奠定了深度学习繁荣发展的基础.这其中涌现了几个著名的深度学习平台,本文将对这些平台进行逐一介绍. 作者 ...

  8. 前沿 | NVIDIA PyTorch库让3D深度学习研究更简单!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :英伟达NVIDIA [人工 ...

  9. 如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)——part02

    今日份学习目标 掌握激活函数 学习激活函数的意义 激活函数和线性变化之间能产生的作用 链式求导 反向传播 传播的顺序由拓扑排序来决定 拓扑排序的原理和实现过程 激活函数 世界中的很多真实关系都不是简单 ...

最新文章

  1. swift UI专项训练4 场景过渡-转场
  2. Win 7 RC版即将发布 新功能提前爆料
  3. 华为交换机netstream配置
  4. go语言基础到提高(5)-结构
  5. nrf52840 gpiote如何配置中断输入_51单片机外部中断点亮LED
  6. 4 关卡流 进阶_全息武器全解析,记住4个点全区第一就是你!
  7. C语言试题六十五之请编写函数实现猴子吃桃问题
  8. oracle 12c alert,Oracle 12c DG备库Alert报错ORA-01110
  9. USACO-Section1.2 Friday the Thirteenth (简单日期处理)
  10. si_meminfo获取当前系统物理内存使用情况
  11. android系统 wifi,Android系统wifi分析-手动连接过程
  12. 《大型数据库技术》MySQL数据库安装配置及基础使用
  13. .Net 面试题 汇总(二)
  14. (原创)批处理学习小结
  15. iOS gzip解压
  16. php 视频分割,如何把一个视频分成两段或多段 视频切割软件
  17. 双向广搜-HDU1401 Solitaire
  18. 颜水成 等 | 《深度长尾学习》综述
  19. PHP使用header实现文件下载功能
  20. c语言使用格里高利求pi,用c语言编写程序4.ppt

热门文章

  1. Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
  2. ui设计移动端字体适配_超全面的移动端UI 设计规范整理汇总
  3. n分解后的最大乘积java_【编程题】乘积最大的拆分
  4. 疯狂java的第四章答案_疯狂java讲义第四章第一题
  5. matlab中函数绝对值图像,ex的图像(绝对值的函数图像口诀)
  6. python调试工具中文版_Python调试工具(PySnooper)
  7. c语言 指针_初识C语言指针
  8. php中的rand,php rand() 随机数生成的方法介绍
  9. android开机动画多长时间_Android系统开机动画的一生
  10. showmount -e (CVE-1999-0554) NFS漏洞解决方案