May 26, 2020

深度学习工具选择 | Keras VS PyTorch,还是?

当你决定学习深度学习时,有一个问题会一直存在——学习哪种工具?深度学习有很多框架和库。这篇文章对两个流行库KerasPytorch进行了对比,因为二者都很容易上手,初学者能够轻松掌握。那么到底应该选哪一个呢?本文分享了一个解决思路



屡试屡验,择优而取


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


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



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


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



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



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


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


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

01

Colab 链接▼
02

PyTorch:

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

03

Keras:

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


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的大多数核心概念是类似的,二者之间的转换非常容易。


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


专业解决方案加速深度学习研究


实践出真知,寻找最适合自己的深度学习框架,需要多多尝试。此时拥有一台性能强劲的深度学习工作站,寻找心仪框架事半功倍,令您研究得心应手。Cloudhin®云轩专注Deep learning和高性能计算服务器定制,针对主要深度学习框架(如TensorFlow、Caffe 2、Theano或Torch)进行了优化和设置,在桌面上即可提供强大的深度学习功能。




Cloudhin®云轩WS4148深度学习水冷工作站搭载6核12线程Intel Core i7 X系列处理器,配合英特尔睿频加速MAX技术3.0助力高效进行计算密集型工作负载。可选四路Nvidia Titan V GPU,将超算架构带入您的PC,单块即有12GB HBM2显存和640个Tensor核心,可提供110万亿次浮点运算性能强强联合,尽享GPU加速人工智能和深度学习的强大功能,帮助AI开发者和数据科学家更快取得成果。



专业勤修,锐意进取。云轩技术工程师毕业于NVIDIA深度学习研究所,丰富经验,值得信赖。更多定制方案请联系客服,我们将实时响应您的定制需求,做您服务器的贴心管理者。