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

网友投稿 928 2022-05-30

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这样的性能监控工具,它可以显示计算图,绘制关于模型训练或推理执行的量化指标,并基本上提供调试和微调深度神经网络所需的各种信息。

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

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

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

EI 人工智能 深度学习 AI

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Excle表格中如何插入打勾号?
下一篇:读懂这些spring boot的核心注解,快速配置完成项目搭建
相关文章