【AI理论】深度学习笔记 | 第20讲:再谈三大深度学习框架TensorFlow、Keras和PyTorch

举报
HWCloudAI 发表于 2019/08/05 14:07:24 2019/08/05
【摘要】 本文将对目前较为热门的三大深度学习框架TensorFlow、Keras和PyTorch进行简单的介绍供各位同学参,以考选择最适合的深度学习框架。

image.png


1

概述


我们先来看一张柱状图,图中显示了2018年各主要深度学习框架的综合得分排名情况:

image.png

数据来源:https://www.kaggle.com/discdiver/deep-learning-framework-power-scores-2018

可以看到:TensorFlow、Keras和PyTorch这三种框架分别位于排行榜前三位,其他小众框架则影响力微弱,比如Theano虽然历史悠久、但实在是太老了,开发团队早已停止开发和维护了;MXNet虽然不错,亚马逊也在用,但相较于前三个确实小众了很多;CNTK是微软推出的深度学习计算框架,但一直一来所获得的关注度也很有限;至于Caffe,由于其本身是由C++编写,也提供了Python接口,但在最新的更新Caffe2中已经被整合进了PyTorch里面去了,所以直接用PyTorch替代即可。正是由于上述原因,笔者这里选择TensorFlow、Keras和PyTorch作为本篇概述的主要内容。

image.png

对于初次踏入深度学习的人员而言,选择哪一门计算框架是一个值得思考的问题,包括小编自己也有这样的疑问。通过这大半年以来的学习经验,小编想说的是,如果是一定要选出一个框架作为你的深度学习入门工具,建议是Keras,Keras具备搭建神经网络各个零部件高度集成的API,对新手非常友好,基于Keras进行一次快速的深度学习试验几乎是分分钟的事情。相对熟练之后我的建议是不要继续停留在Keras的舒适区,你应该继续学习其他计算框架,无论是流行度第一的TensorFlow还是异军突起的PyTorch,你都得学,包括小编自己,现在也在跟着PyTorch的文档在深入学习。假如你只学了TensorFlow,有一个你非常感兴趣的深度学习项目,结果对方是用PyTorch写的,如果你一点也不懂PyTorch,岂不是很尴尬,再说PyTorch在2018年下半年在一段时间内的热度已经赶超TensorFlow了。

所以对于框架而言,笔者的建议在于:先选一门Keras作为入门,熟练之后直接学习TensorFlow和PyTorch,理论结合实践,多动手,相信对于学习深度学习而言,工具不会是大问题。

下面我们就再次单独来看一下TensorFlow、Keras和PyTorch这三大深度学习计算框架。


2

TensorFlow


作为Google开发维护的深度学习工具,TensorFlow应该是目前最为流行和使用率最高的深度学习计算框架了。它是用C ++ / Python编写的,提供Python,R、Java,Go和JavaScript API。TensorFlow使用静态计算图,尽管最近发布的TensorFlow Fold库也增加了对动态图的支持。此外,从版本1.7开始,TensorFlow在动态执行方面采取了不同的步骤,并实现了可以立即评估Python代码的急切执行,而无需构建图形。


另外TensorFlow也有着非常好的社区环境支持,你可以轻易的从网上找到很多有关TensorFlow使用教程、视频,在线课程和教程等等。除了纯粹的计算功能外,TensorFlow还提供了TensorBoard这样的性能监控工具,它可以显示计算图,绘制关于模型训练或推理执行的量化指标,并基本上提供调试和微调深度神经网络所需的各种信息。

image.png

TensorFlow虽然很棒,但对于初学者来说并不友好,初学者用TensorFlow来搭建神经网络需要一个思维转变,总体来说TensorFlow没那么容易。

基于TensorFlow搭建神经网络的简单例子:

import numpy as np
import tensorflow as tf data_size = 10
input_size = 28 * 28
hidden1_output = 200
output_size = 1
data = tf.placeholder(tf.float32, shape=(data_size, input_size)) target = tf.placeholder(tf.float32, shape=(data_size, output_size)) h1_w1 = tf.Variable(tf.random_uniform((input_size, hidden1_output))) h2_w1 = tf.Variable(tf.random_uniform((hidden1_output, output_size))) hidden1_out = tf.maximum(tf.matmul(data, h1_w1), 0) target_ = tf.matmul(hidden1_out, h2_w1) loss = tf.losses.mean_squared_error(target_, target) opt = tf.train.GradientDescentOptimizer(1e-3) upd = opt.minimize(loss)with tf.Session() as sess:    sess.run(tf.global_variables_initializer())    feed = {data: np.random.randn(data_size, input_size),            target: np.random.randn(data_size, output_size)}    
   for step in range(100):        loss_val, _ = sess.run([loss, upd], feed_dict=feed)


3

Keras


再来看Keras。

Keras是一个高层神经网络API,Keras由纯Python编写而成并基TensorFlow、Theano以及CNTK后端。所以我们也可以直接使用TensorFlow调用Keras。Keras 为支持快速实验而生,能够把你的想法迅速转换为结果,Keras的主要优点如下:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)

  • 支持CNN和RNN,或二者的结合

  • 无缝CPU和GPU切换


image.png

Keras非常易于学习和使用。无论是初学者还是不打算进行复杂研究的高级深度学习研究员,笔者都建议你使用Keras。Keras的设计原则:

  • 用户友好:用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。

  • 模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。

  • 易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。

  • 与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。

image.png

将前面TensorFlow的例子再用Keras写一遍如下:


import numpy as np
from keras.layers import Dense
from keras.models import Sequential
from keras.optimizers import SGD data_size = 10
input_size = 28 * 28
hidden1_output = 200
output_size = 1
data = np.random.randn(data_size, input_size) target = np.random.randn(data_size, output_size) model = Sequential() model.add(Dense(hidden1_output,                input_shape=(input_size,), activation=tf.nn.relu)) model.add(Dense(output_size)) model.compile(loss='mean_squared_error',              optimizer=SGD(lr=1e-3)) model.fit(data, target, epochs=100, batch_size=data_size)


4

PyTorch


最后是PyTorch。

image.png

PyTorch是一款可以媲美于 TensorFlow 优秀的深度学习计算框架,但又相比于 TensorFlow 在语法上更具备灵活性。PyTorch原生于一款小众语言lua,而后基于python 版本后具备了强大的生命力。作为一款基于 python 的深度学习计算库,PyTorch提供了高于 numpy 的强大的张量计算能力和兼具灵活度和速度的深度学习研究功能。

image.png

PyTorch已经于今年10月份发布了1.0版本,标识着PyTorch正式走向了稳定可用阶段。在最新的 ICLR 2019 提交论文中,提及TensorFlow的论文数量从228升到了266,而提及PyTorch的论文数量从 2018 年的 87 激增到了252。这也从侧面说明PyTorch影响力今非昔比。

基于PyTorch搭建神经网络示例:

import torch
import torch.nn as nn
import torch.nn.functional as fun data_size = 10
input_size = 28 * 28
hidden1_output = 200
output_size = 1
data = torch.randn(data_size, input_size) target = torch.randn(data_size, output_size) model = nn.Sequential(    nn.Linear(input_size, hidden1_output),    nn.ReLU(),    nn.Linear(hidden1_output, output_size) ) opt = torch.optim.SGD(model.parameters(), lr=1e-3)
for step in range(100):    target_ = model(data)    loss = fun.mse_loss(target_, target)    loss.backward()    opt.step()    opt.zero_grad()

最后的结论就是:对于TensorFlow、Keras和PyTorch这三种深度学习计算框架,大家最好都要学习!




转自:https://mp.weixin.qq.com/s/ul4deOMigf11LttiYk1A3Q

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。