「决战紫禁之巅」之深度学习框架篇:Keras VS PyTorch

作者: 机器之心 2019-06-26 05:29:44

TensorFlow 是很多科学家、工程师和开发人员的首个深度学习框架。虽然 TensorFlow 1.0 早在 2017 年 2 月就发布了,但使用过程中对用户不太友好。

过去几年里,Keras 和 PyTorch 日益成为广受用户欢迎的两种深度学习库,因为它们使用起来比 TensorFlow 简单多了。

本文将分别对 Keras 和 PyTorch 的四个方面进行比较,你可以根据两种框架的优劣势以及自身的需要选择其中一种。

一、Keras 和 PyTorch 简介

Keras 于 2015 年 3 月首次发布,是能够在 TensorFlow、CNTK、Theano 或 MXNet 上运行的高级 API(或作为 TensorFlow 内的 tf.contrib)。Keras 的突出特点在于其易用性,它是迄今为止最容易上手且能够快速运行的框架。此外,Keras 能够直观地定义神经网络,函数式 API 的使用令用户可以将层定义为函数。

PyTorch 于 2016 年 10 月发布,由 Facebook AI 研究团队开发,是专注于直接处理数组表达式的较低级别 API。与 Keras 相比,你能够拥有更强的灵活度以及对 PyTorch 的控制,同时又不需要进行太多的声明式编程(declarative programming)。

二、选择 Keras 还是 PyTorch?

有时,深度学习从业者会纠结于应该使用哪一种框架,这通常取决于个人喜好。下面将介绍 Keras 和 PyTorch 的几个方面对比,你可据此做出自己的选择。

1. 定义模型的类 vs 函数

Keras 在定义深度学习模型时提供函数式 API。通过函数式 API,神经网络被定义为一组序列函数,然后一个接一个地得到应用。例如,函数定义层 1 的输出是函数定义层 2 的输入。

在使用 PyTorch 时,用户将神经网络设置为一个扩展了 Torch 库中 torch.nn. 模块的类。与 Keras 类似,PyTorch 为用户提供作为组件的层,但由于这些层属于 Python 类,所以它们是类__init__() 方法中的引用,并通过类的 forward() 方法执行。

相比而言,PyTorch 能够令你访问 Python 的所有类别特征,而不只是简单的函数调用。定义网络变得更加清晰,而且优雅。但如果你认为以最快的速度编写网络代码最为重要,则 Keras 对你来说更加易于使用。

2. 张量和计算图 vs 标准阵列

对于一般程序员来说,Keras API 会隐藏大量的混乱细节,定义网络层也非常直观。因而,你在默认设置下就足以入门。但当你想要实现一个非常先进或「独特的」模型时,才真正需要深入了解低级和本质的 TensorFlow。

但当你真正深入了解低级 TensorFlow 代码时,就会遇到一些挑战。你需要确保所有矩阵乘法对齐。更不要想着将层输出打印出来了,因为你会在终端上打印出一个很好的张量定义(Tensor definition)。

相较于 Keras,PyTorch 在这些方面往往更加宽容。你只需要了解每个层的输入和输出大小就可以了,并且 PyTorch 在这一点上做得非常好,你可以快速掌握。你不需要构建抽象的计算图(其内部情况你在调试时无法看到)。

PyTorch 的另一个优点在于其平滑性(smoothness),你可以在 Torch 张量和 Numpy 矩阵之间来回切换。但如果开发者需要实现一些自定义内容,则 TF 张量和 Numpy 矩阵之间的切换可能会很麻烦,这要求他们对 TensorFlow 有一个透彻了解。

实际上,PyTorch 的交互运算更加简单,两步即可:将 Torch 张量(变量对象)转换成 Numpy,然后进行反向运算即可。

当然,如果你不需要实现任何独特的内容,则 Keras 也表现的非常好,因为你不会遇到任何 TensorFlow 障碍。但如果想要实现一些独特的内容,则 PyTorch 可能会表现得更加平滑。

3. 训练模型

开始训练

利用 Keras 训练模型超级简单!只需要一个简单的.fit(),你就可以开启模型训练之旅。

而利用 PyTorch 训练模型包含以下几个步骤:

  • 每一批次的训练开始时初始化梯度
  • 在模型中运行前向传播
  • 运行后向传播
  • 计算损失和更新权重

所以,就训练模型来说,PyTorch 较为繁琐。

4. 控制 CPU vs GPU 模式

我们需要更多算力。

如果你已经安装了 tensorflow-gpu,则在 Keras 中能够使用 GPU 并且会默认完成。然后,如果你想要将某些运算转移至 CPU,则可以以单行方式完成。

但对于 PyTorch 来说,你必须显式地为每个 torch 张量和 numpy 变量启动 GPU。这样代码会比较混乱。并且如果你想在 CPU 和 GPU 之间来回移动以执行不同运算,则很容易出错。

例如,为了将之前的模型转移到 GPU 上运行,则需要以下步骤:

因而,Keras 在简洁性和默认设置方面优于 PyTorch。

三、选择 Keras 或 PyTorch 的一般性建议

作者通常建议初学者从 Keras 开始。Keras 绝对是理解和使用起来最简单的框架,能够很快地上手运行。你完全不需要担心 GPU 设置、处理抽象代码以及其他任何复杂的事情。你甚至可以在不接触任何 TensorFlow 单行代码的情况下,实现自定义层和损失函数。

但如果你开始深度了解到深度网络的更细粒度层面或者正在实现一些非标准的事情,则 PyTorch 是你的首选库。使用 PyTorch 需要进行一些额外操作,但这不会减缓你的进程。你依然能够快速实现、训练和测试网络,并享受简单调试带来的额外益处。

参考链接:https://towardsdatascience.com/keras-vs-pytorch-for-deep-learning-a013cb63870d

【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

深度学习 Keras PyTorch
上一篇:车联网频率三年免费 自动驾驶产业化提速 下一篇:机器人如何扩展物联网应用的范围
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

图灵奖得主Yoshua Bengio:深度学习当务之急,是理解因果关系

深度学习擅长在大量数据中发现模式,但无法解释它们之间的联系,而图灵奖获得者Yoshua Bengio想要改变这一点。

佚名 ·  2天前
2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

2019年,机器学习框架之争进入了新阶段:PyTorch与TensorFlow成为最后两大玩家,PyTorch占据学术界领军地位,TensorFlow在工业界力量依然强大,两个框架都在向对方借鉴,但是都不太理想。

大数据文摘 ·  2019-10-11 23:18:15
18个挑战项目带你快速入门深度学习

AlphaGo 大战李世?h之后,深度学习技术便在国内变得异常火。吸引了大批的技术人员争相学习,那么到底如何才能更快速的入门深度学习呢?下面给大家介绍的 18 个挑战项目,通过实践动手带你快速入门深度学习!

实验楼 ·  2019-10-10 14:48:19
盘点 | 8个你可能不知道的深度学习应用案例

深度学习与传统机器学习系统的不同之处在于,它能够在分析大型数据集时进行自我学习和改进,因此能应用在许多不同的领域。

天极网 ·  2019-10-10 14:15:18
2019年较热门的5大深度学习课程

今天,我们将和大家盘点一下,当下较流行的深度学习资源/课程,可以帮助你们提升深度学习技能。

猿哥 ·  2019-09-26 05:16:24
DeepMind一次性开源3个新框架!深度强化学习应用落地即将迎来春天?

深度强化学习(Deep Reinforcement Learning,DRL)一直是近年来人工智能的一些重大突破的核心。然而,尽管 DRL 有了很大的进步,但由于缺乏工具和库,DRL 方法在主流解决方案中仍然难以应用。

杨鲤萍 ·  2019-09-20 09:38:18
一步一步带你完成深度学习与对象检测之人脸识别

要进行人脸识别,就要搜集用户的人脸图片,我们从网站上搜集了几个明星的照片来进行本期文章的分享。此部分文章是人脸识别的第一部分,人脸数据的搜集与提取,后期我们分享人脸识别系统的神经网络训练与人脸识别。

人工智能研究所 ·  2019-09-18 07:20:34
看懂这十步,8岁的小朋友都能理解深度学习

如果对当今人工智能的主流技术——深度学习没有了解,可能真的会有人觉得,当前的科学家们在创造无所不能、无所不知的电影AI形象。那么,如何用最浅显的方式,给大众解释什么是深度学习呢?快来看看吧!

佚名 ·  2019-09-17 16:56:39
Copyright©2005-2019 51CTO.COM 版权所有 未经许可 请勿转载