社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

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

狗熊会 • 5 年前 • 329 次点击  




大家好!又到了每周一狗熊会的深度学习时间了,这也是咱们深度学习20讲系列里的最后一讲了。在上一讲中,我们和大家介绍了深度学习的一些延伸性的内容,对神经风格迁移、深度强化学习以及胶囊网络进行了简单单介绍。最后系列的最后一讲,小编将对目前较为热门的三大深度学习框架TensorFlow、Keras和PyTorch进行简单的介绍。 

1

概述

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


数据来源: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作为本篇概述的主要内容。

对于初次踏入深度学习的人员而言,选择哪一门计算框架是一个值得思考的问题,包括小编自己也有这样的疑问。通过这大半年以来的学习经验,小编想说的是,如果是一定要选出一个框架作为你的深度学习入门工具,建议是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这样的性能监控工具,它可以显示计算图,绘制关于模型训练或推理执行的量化指标,并基本上提供调试和微调深度神经网络所需的各种信息。

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切换


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

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

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

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

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


将前面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。

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

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这三种深度学习计算框架,大家最好都要学习!

以上便是本讲内容。


本节作为系列最后一讲,小编和大家对深度学习主要的三大计算框架TensorFlow、Keras和PyTorch进行了简单的概述,以帮助大家学习深度学习时作为参考。虽说如此,对于三大框架,小编建议大家都要认真学习。

 


【参考资料】

https://www.jiqizhixin.com/articles/deep-learning-framework-scores-2018

https://keras-cn.readthedocs.io/en/latest/

https://medium.com/neuromation-io-blog/neuronuggets-an-overview-of-deep-learning-frameworks-8e5c164ce012


作者简介


鲁伟,狗熊会人才计划一期学员。目前在杭州某软件公司从事数据分析和深度学习相关的研究工作,研究方向为贝叶斯统计、计算机视觉和迁移学习。

识别二维码,查看作者更多精彩文章






识别下方二维码成为狗熊会会员!

友情提示:

个人会员不提供数据、代码

视频only!

个人会员网址:http://teach.xiong99.com.cn

点击“阅读原文”,成为狗熊会会员!
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29165
 
329 次点击