来源:机器之心

参与:杜伟、一鸣

Keras和PyTorch之争由来已久。一年前,机器之心就曾做过此方面的探讨:《Keras vs PyTorch:谁是「第一」深度学习框架?》。现在PyTorch已经升级到1.x版本,而Keras也在进一步发展,情况发生了怎样的变化呢?本文从四个方面对Keras和PyTorch各自的优劣势做了进一步详述,相信读者会对如何选择适合自己的框架有更清楚的认知。

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 的几个方面对比,你可据此做出自己的选择。

定义模型的类 vs 函数

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

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

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

张量和计算图 vs 标准阵列

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

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

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

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

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

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

训练模型

开始训练

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

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

  • 每一批次的训练开始时初始化梯度

  • 在模型中运行前向传播

  • 运行后向传播

  • 计算损失和更新权重

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

控制 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

深度学习框架对决篇:Keras VS PyTorch相关推荐

  1. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  2. 带你测试对比深度学习框架!TensorFlow,Keras,PyTorch...哪家强?(附数据集)

    授权自AI科技大本营(ID: rgznai100) 本文长度为3556字,建议阅读7分钟 亚马逊MXNet在CNN.RNN与NLP情感分析任务上性能强劲,而TensorFlow仅擅长于特征提取. 深度 ...

  3. ArXiv最火深度学习框架:TensorFlow第一,PyTorch第二!|湾区人工智能

    一年不算短,但也不算长.一年时间,可以让Swift从11位跌倒13位,也可以让PyTorch从第4位飙升194%至第2位! PyTorch狂涨194%,逼近TensorFlow份额 UC伯克利RISE ...

  4. 2019 深度学习框架大盘点!看 PyTorch、TensorFlow 如何强势上榜?

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 本文将以一个视频的方式讲解 2019 年深度学习各大框架.视频作者来自人工智能领域的网红小哥  ...

  5. 收藏 | 深度学习框架简史:TensorFlow和PyTorch双头垄断

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  6. 小白入门深度学习 | 第四篇:配置PyTorch环境

  7. 【深度学习框架】|Keras|完成一个手写体识别任务

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

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

  9. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet

    常用深度学习框--Caffe/TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tensor ...

最新文章

  1. 转:去掉Flex4生成的SWF加载时的进度条
  2. PMcaff-干货| App品牌初期搭建必须要注意的几个点
  3. scipy是python下的什么_SciPy是什么
  4. element-ui中表单验证rules
  5. cloud一分钟 | 腾讯金融云总经理胡利明:腾讯云服务金融的“加减 乘除”法。...
  6. form表单图片预览 layui_layui 实现图片上传和预览
  7. Envi和Arcgis软件冲突的解决方法
  8. 使用单链表数据结构存储结构化的学生信息
  9. Jquery:ajax跨域请求处理
  10. 查找Ubuntu下包的归属
  11. 去掉Eclipse打开后定期弹出Usage Data Upload对话框
  12. 创客使用Fusion 360 - 草绘
  13. als算法参数_ALS算法实现用户音乐打分预测
  14. Mobile-Unet
  15. [ CSS-CSS3 ] 更适合你的CSS样式一览表
  16. sys.path.append()
  17. 利用开源软件 Hugin 实现照片的景深合成
  18. 亲身试验之后,我差点被微博上的兼职广告骗到三和
  19. JeecgBoot 框架中实现路由跳转页面,其他页面接收参数等使用方法
  20. 构建云管理平台,需要满足哪几方面需求?

热门文章

  1. PHP对URL进行字符串编码
  2. Linux文本处理命令:cut grep awk sed printf
  3. JQUERY的location.href.split
  4. layui获取checkbox选中值_小程序之十二 获取多选按钮数值及后续想法
  5. Mybatis中mapper接口里方法重载的实现
  6. puts遇到空格无法输出_输入一句英文,只包含字母和空格,如何输出这句英文中.....-黑马程序员技术交流社区...
  7. 60多套html5移动端模板_美容整形高保真移动端原型模板发布
  8. 从mysql读取数据保存成excel_小程序读取excel表格数据,并存储到云数据库
  9. 【mybatis】插入操作更新id
  10. 【若依(ruoyi)】table定制列宽