点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

如何选择工具对深度学习初学者是个难题。本文作者以 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

好消息!

小白学视觉知识星球

开始面向外开放啦

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

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

    选自Medium 作者:Karan Jakhar 机器之心编译 参与:小舟.魔王 如何选择工具对深度学习初学者是个难题.本文作者以 Keras 和 Pytorch 库为例,提供了解决该问题的思路. 当 ...

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

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

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

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

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

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

  5. 你觉得你有那些特质让你比别人更适合做产品经理?

    面试中我们可能会被问到这样一个问题,你觉得你有哪些特质让你比别人更适合做产品经理?产品小白尤其会被问到这个问题.那针对这个问题我们该如何回答呢?今天就来和大家聊聊这个话题. 面试题分析: 面试官一是想 ...

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

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

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

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

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

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

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

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

最新文章

  1. qq空间等闪动的文字怎么做?
  2. access自动自动累计余额_【大招来临】—— 真 自动化财务报告
  3. Netty 高性能之道 - Recycler 对象池的复用
  4. [YTU]_2437 (C++ 习题 比较大小-类模板)
  5. cocos2d学习路线
  6. 【Tensorflow】tf.set_random_seed(seed)
  7. Linux记录-TCP状态以及(TIME_WAIT/CLOSE_WAIT)分析(转载)
  8. 数据结构课上笔记14
  9. 【kafka】kafka 判断消费组死掉方案 group dead
  10. pgsql merge方法
  11. oracle-jde操作界面,JDE项目系统基础培训.ppt
  12. java加减乘除判断代码_JAVA实现精确的加减乘除代码
  13. web service 优缺点
  14. Excel批量更改图片名称(无需下载其他工具)
  15. 小封装SOT23车规加密认证芯片ALPU-CV
  16. template波浪线
  17. tensorflow的early stopping模型保存方式
  18. JavaScript验证Email地址
  19. Codeforces Round #428 (Div. 2):A. Arya and Bran
  20. ArcGIS API For JavaScript Font字体简介,下载及本地部署

热门文章

  1. 2019年第三期全国高校大数据与人工智能骨干师资研修班
  2. 我是个妈妈,我需要铂金包读后感
  3. 分享一颗QC转PD,还支持USB数据传输的协议芯片
  4. Siemens Simcenter FloEFD 2021.1.0 v5312 for Simcenter3D
  5. 【母亲节快乐!】首部高中AI基础教材发布,40所重点中学引入
  6. OpenCV——Canny边缘检测(cv2.Canny())
  7. 一个时间计数器timewatch辅助性能测试
  8. Python之数据分析(宝可梦数据分析)
  9. 前端开发入门:html和css基础知识回顾2
  10. qt开发的有界面的简易对战游戏——斗罗大PK(可用作c,c++课程设计)