选自Medium

作者:Karan Jakhar

机器之心编译

参与:小舟、魔王

如何选择工具对深度学习初学者是个难题。本文作者以 Keras 和 Pytorch 库为例,提供了解决该问题的思路。

当你决定学习深度学习时,有一个问题会一直存在——学习哪种工具?

深度学习有很多框架和库。这篇文章对两个流行库 Keras 和 Pytorch 进行了对比,因为二者都很容易上手,初学者能够轻松掌握。

那么到底应该选哪一个呢?本文分享了一个解决思路。

做出合适选择的最佳方法是对每个框架的代码样式有一个概览。开发任何解决方案时首先也是最重要的事就是开发工具。你必须在开始一项工程之前设置好开发工具。一旦开始,就不能一直换工具了,否则会影响你的开发效率。

作为初学者,你应该多尝试不同的工具,找到最适合你的那一个。但是当你认真开发一个项目时,这些事应该提前计划好。

每天都会有新的框架和工具投入市场,而最好的工具能够在定制和抽象之间做好平衡。工具应该和你的思考方式和代码样式同步。因此要想找到适合自己的工具,首先你要多尝试不同的工具。

我们同时用 Keras 和 PyTorch 训练一个简单的模型。如果你是深度学习初学者,对有些概念无法完全理解,不要担心。从现在开始,专注于这两个框架的代码样式,尽量去想象哪个最适合你,使用哪个工具你最舒服,也最容易适应。

这两个工具最大的区别在于:PyTorch 默认为 eager 模式,而 Keras 基于 TensorFlow 和其他框架运行(现在主要是 TensorFlow),其默认模式为图模式。最新版本的 TensorFlow 也提供类似 PyTorch 的 eager 模式,但是速度较慢。

如果你熟悉 NumPy,你可以将 PyTorch 视为有 GPU 支持的 NumPy。此外,现在有多个具备高级 API(如 Keras)且以 PyTorch 为后端框架的库,如 Fastai、Lightning、Ignite 等。如果你对它们感兴趣,那你选择 PyTorch 的理由就多了一个。

在不同的框架里有不同的模型实现方法。让我们看一下这两种框架里的简单实现。本文提供了 Google Colab 链接。打开链接,试验代码。这可以帮助你找到最适合自己的框架。

我不会给出太多细节,因为在此,我们的目标是看一下代码结构,简单熟悉一下框架的样式。

Keras 中的模型实现

以下示例是数字识别的实现。代码很容易理解。你需要打开 colab,试验代码,至少自己运行一遍。

Keras 自带一些样本数据集,如 MNIST 手写数字数据集。以上代码可以加载这些数据,数据集图像是 NumPy 数组格式。Keras 还做了一点图像预处理,使数据适用于模型。

以上代码展示了模型。在 Keras(TensorFlow)上,我们首先需要定义要使用的东西,然后立刻运行。在 Keras 中,我们无法随时随地进行试验,不过 PyTorch 可以。

以上的代码用于训练和评估模型。我们可以使用 save() 函数来保存模型,以便后续用 load_model() 函数加载模型。predict() 函数则用来获取模型在测试数据上的输出。

现在我们概览了 Keras 基本模型实现过程,现在来看 PyTorch。

PyTorch 中的模型实现

研究人员大多使用 PyTorch,因为它比较灵活,代码样式也是试验性的。你可以在 PyTorch 中调整任何事,并控制全部,但控制也伴随着责任。

在 PyTorch 里进行试验是很容易的。因为你不需要先定义好每一件事再运行。我们能够轻松测试每一步。因此,在 PyTorch 中 debug 要比在 Keras 中容易一些。

接下来,我们来看简单的数字识别模型实现。

以上代码导入了必需的库,并定义了一些变量。n_epochs、momentum 等变量都是必须设置的超参数。此处不讨论细节,我们的目的是理解代码的结构。

以上代码旨在声明用于加载训练所用批量数据的数据加载器。下载数据有很多种方式,不受框架限制。如果你刚开始学习深度学习,以上代码可能看起来比较复杂。

在此,我们定义了模型。这是一种创建网络的通用方法。我们扩展了 nn.Module,在前向传递中调用 forward() 函数。

PyTorch 的实现比较直接,且能够根据需要进行修改。

以上代码段定义了训练和测试函数。在 Keras 中,我们需要调用 fit() 函数把这些事自动做完。但是在 PyTorch 中,我们必须手动执行这些步骤。像 Fastai 这样的高级 API 库会简化它,训练所需的代码也更少。

最后,保存和加载模型,以进行二次训练或预测。这部分没有太多差别。PyTorch 模型通常有 pt 或 pth 扩展。

关于框架选择的建议

学会一种模型并理解其概念后,再转向另一种模型,并不是件难事,只是需要一些时间。本文作者给出的建议是两个都学,但是不需要两个都深入地学。

你应该从一个开始,然后在该框架中实现模型,同时也应当掌握另一个框架的知识。这有助于你阅读别人用另一个框架写的代码。永远不要被框架限制住。

先从适合自己的框架开始,然后尝试学习另一个。如果你发现另一个用起来更合适,那么转换成另一个。因为 PyTorch 和 Keras 的大多数核心概念是类似的,二者之间的转换非常容易。

Colab 链接:

  • PyTorch:https://colab.research.google.com/drive/1irYr0byhK6XZrImiY4nt9wX0fRp3c9mx?usp=sharing

  • Keras:https://colab.research.google.com/drive/1QH6VOY_uOqZ6wjxP0K8anBAXmI0AwQCm?usp=sharing

原文链接:https://medium.com/@karan_jakhar/keras-vs-pytorch-dilemma-dc434e5b5ae0

文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

Keras vs PyTorch,哪一个更适合做深度学习?相关推荐

  1. 【干货】Keras vs PyTorch,哪一个更适合做深度学习?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何选择工具对深度学习初学者是个难题.本文作者以 Keras 和 ...

  2. 软件工程和计科专业对比,哪一个更适合毕业做程序员?

    大学学的是计算机科学与技术专业,现在已经从事编码十几年,其实关于这个问题从理论上讲都是可以切入到程序员领域的! 我们先从这两个专业着手分析,计科全称为计算机科学与技术专业,顾名思义:科学实际上指的就是 ...

  3. 五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 原文地址:http://click.aliyun.com/m/43988/ 1.Python网络编程框架Twi ...

  4. 下列哪个适合做链栈_朋友圈人格图鉴:三天可见 vs 全部可见,哪个更适合做恋人?...

    你们的朋友圈里有没有这样几种人? << 朋友圈大赏 >> 你可能已经对这些朋友圈的风格习以为常,其实,每个人在朋友圈展示的语言.行为,可能默默揭示着一个人自己原本是怎样的人.想 ...

  5. 传统到敏捷的转型中,谁更适合做Scrum Master?

    摘要:本文主要讲述的是从传统到敏捷Scrum团队转型中,对Scrum Master这一角色的分析. 本文分享自华为云社区<传统到敏捷的转型中,谁更适合做Scrum Master?>,作者: ...

  6. 系统测试与端到端测试:哪一个更适合选择?

    系统测试与端到端测试:哪一个更适合选择? 概述系统测试以及端到端测试: 端到端测试和系统测试总是并驾齐驱,但即使是经验丰富的测试专业人员也可能会对每个测试提供的巨大好处感到困惑,只选择一个. 在本文中 ...

  7. python和lisp学哪个好_五位专家跟你讲讲为啥Python更适合做AI/机器学习

    摘要: 为什么Python会在这股深度学习浪潮中成为编程语言的头牌?听听大牛如何解释吧! 1.Python网络编程框架Twisted的创始人Glyph Lefkowitz(glyph): 编程是一项社 ...

  8. 下列哪个适合做链栈_很多朋友在问:多层实木生态板和颗粒板哪个更适合做衣柜呢?...

    多层实木生态板和颗粒板哪个更适合做衣柜呢?这是很多消费者非常关心的问题,济南定制家具为你解答. 考虑到衣柜一般是家庭使用,所以我们一般看好衣柜的质量和环保,当消费者去板材市场选购济南定制家具板材,商家 ...

  9. 链表!比数组更适合做增删操作的数据结构

    什么是链表? 链表和数组的对比:在大多数语言中,数组的大小是固定的,从数组的起点或中间添加或删除元素的成本很高,因为需要移动元素. 链表中的每一个元素在内存中不是连续放置的,和它左右两侧元素是没有关系 ...

最新文章

  1. K单体型重建算法的研究
  2. 简单的php服务文件下载,php文件下载
  3. RedMine项目管理系统邮件推送设置(Windows环境)
  4. 期待微软平台即服务技术Service Fabric 开源
  5. [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL
  6. c语言 l l next,nexttowardl
  7. Spring MVC对象转换说明
  8. Bootstrap 模态框插件Modal 的选项
  9. 华为再获90天“临时许可证” 可继续维护客户
  10. linux yum安装redis5.0,CentOS 7安装Redis 5.0.5并加入Systemd服务
  11. LINUX虚拟机与WINDOWS主机,直接复制交换文件会有问题
  12. javaweb JAVA JSP员工绩效考核管理系统(员工考核管理系统)员工考勤管理系统人事考勤
  13. 简单典型二阶系统_非典型二阶系统的特性
  14. OMNeT 例程 Tictoc16 学习笔记
  15. Win11磁盘被写保护怎么解除?
  16. 网络加密流量的相关研究
  17. asp/php/asp.net网站后台HTML编辑器eWebEditor升级kindeditor编辑器
  18. s7五杀大数据英雄_S7入围赛战报:首个五杀!LYN击败GMB
  19. 5110. 近义词句子
  20. 人事管理系统是什么?HR系统有什么用?

热门文章

  1. 【怎样写代码】参数化类型 -- 泛型(七):泛型方法
  2. Matlab与线性代数 -- 全1矩阵
  3. adaptiveThreshold 阈值化的实现
  4. 【数据结构】顺序串的插入算法,删除算法,连接运算,顺序串求子串算法
  5. html在线缓存视频,javascript – 如何为HTML视频添加缓冲
  6. 工程师文化:BAT 为什么不喊老板
  7. 一文全览机器学习建模流程(Python代码)
  8. 《赛博朋克2077》是捏脸游戏?上科大学生社团开发了一款赛博“滤镜”
  9. 32岁程序员面试被拒:比又穷又忙更可怕的,是2020年你还不懂...
  10. 在图数据上做机器学习,应该从哪个点切入?