专栏首页机器之心Keras vs PyTorch,哪一个更适合做深度学习?

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

选自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

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 对比复现34个预训练模型,PyTorch和Keras你选谁?

    Keras 和 PyTorch 当然是对初学者最友好的深度学习框架,它们用起来就像描述架构的简单语言一样,告诉框架哪一层该用什么。这样减少了很多抽象工作,例如设...

    机器之心
  • Keras vs PyTorch:谁是「第一」深度学习框架?

    值得一提的是,尽管在 4 月底 PyTorch 在 0.4 版本中已经加入了对于 Windows 的支持,但其对比 Keras 与 TensorFlow 在 W...

    机器之心
  • OpenAI全面拥抱PyTorch,TensorFlow:我哪里比不上它?

    对于深度学习框架的使用,整个人工智能社区大体可以分为两大阵营:TensorFlow 和 PyTorch。有观点认为,PyTorch 更适合研究领域,而实际的工业...

    机器之心
  • Keras vs PyTorch,哪一个更适合做深度学习?

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

    计算机视觉联盟
  • Keras vs PyTorch,哪一个更适合做深度学习?

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

    yuquanle
  • Keras系列(一):介绍

    上次铁柱分享了一个使用深度学习库Keras预测风功率的案例,有小伙伴表示一脸懵逼,没关系,其实Keras上手很快,毕竟外卖小哥都可以上手深度学习,化身TF BO...

    zhangqibot
  • 喜大普奔,Keras 官方中文版文档发布啦!

    AI 研习社消息,日前,Keras 之父 François Chollet 在 twitter 上发布消息,宣称 Keras 中文版本正式上线,同时,对所有做出...

    AI研习社
  • Keras 学习笔记(二)什么是Keras?为什么要使用Keras?

    在如今无数深度学习框架中,为什么要使用 Keras 而非其他?以下是 Keras 与现有替代品的一些比较。

    种花家的奋斗兔
  • 资源 | 这是你要的Keras官方中文版(附文档链接)

    Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的作...

    AI科技大本营
  • 9种平台帮助你深度学习Keras

    Keras是一个Python深度学习库,它可以使用高效的Theano或TensorFlow符号数学库作为后端。同时,Keras很容易使用,你可以在几分钟内开发出...

    AiTechYun

扫码关注云+社区

领取腾讯云代金券