加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

Keras还是TensorFlow?程序员该如何选择深度学习框架?

发布时间:2018-10-21 09:32:15 所属栏目:移动互联 来源:王天宇、林椿眄编译
导读:【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道 深度进修成长势头迅猛,但近两年涌现的诸多深度进修框架让初学者无所适从。如 Google 的 TensorFlow、亚马逊的 MXNet、Facebook 支持的 PyTorch、Theano、Caffe、CNTK、Chainer、百度的 Pad
副问题[/!--empirenews.page--] 【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

深度进修成长势头迅猛,但近两年涌现的诸多深度进修框架让初学者无所适从。如 Google 的 TensorFlow、亚马逊的 MXNet、Facebook 支持的 PyTorch、Theano、Caffe、CNTK、Chainer、百度的 PaddlePaddle、DSSTNE、DyNet、BigDL、Neon 等等。

在这个中,TensorFlow 作为最为闻名的用于深度进修出产情形的框架,它有一个很是强盛的生态系统支持,然而,对比其他框架,TensorFlow 也有其劣势,如速率较慢、行使上手难。而基于 TensorFlow 基本上构建的 Keras 提供了简朴易用的 API 接口,很是得当初学者行使。

2017 年 1 月,跟着 Keras 的作者、谷歌 AI 研究员 Francois Chollet 的一条动静的公布,Keras 成为第一个被添加到 TensorFlow 焦点的高级别框架,Keras 以后成为 Tensorflow 的默认 API。

“那么,我应该在项目中行使 Keras 照旧 TensorFlow?Keras 和 TensorFlow 毕竟哪个会更好?我应该把时刻花在研究 TensorFlow 照旧 Keras 上?”

在与深度进修的研究职员、从颐魅者包罗工程师在内的攀谈中,“Deep Learning for Computer Vision with Python ”一书作者 Adrian Rosebrock 听到了他们的狐疑。

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

就 Keras 和 TensorFlow 而言,Rosebrock 以为开拓者更应该存眷的是当 Keras 现实上已被完全回收并整合到 TensorFlow 后,本身可以:

  1. 行使 Keras 易于行使的界面界说模子。
  2. 假如必要 TensorFlow 的特定成果,或必要实现 Keras 不支持但 TensorFlow 支持的自界说成果,则调入 TensorFlow。

他给出的提议是先行使 Keras ,然后下载 TensorFlow 以获取也许必要的任何特定成果。文本中,Rosebrock 展示了怎样实习行使 Keras 的神经收集和行使直接构建在 TensorFlow 库中的 Keras+TensorFlow 集成(具有自界说成果)的模子。

下面开始正文:

▌比拟 Keras 和 TensorFlow 没什么意义

前些年,深度进修规模的研究职员、开拓职员和工程师必需常常做出一些选择:

  1. 我应该选择易于行使但自界说坚苦的 Keras 库?
  2. 照旧应该行使难度更大的 TensorFlow API,编写大量代码?(更不消说一个不那么轻易行使的 API 了。)

假如你陷于“我应该行使 Keras 照旧 TensorFlow”这样的题目,你可以退一步再看,其拭魅这是一个错误的题目,由于你可以选择同时行使两个。

我会行使基于 TensorFlow 的尺度 keras 模块和 tf.keras 模块,来实现一个卷积神经收集(CNN)。然后,基于一个示例数据集,来实习这些 CNN,然后搜查所得功效,你会发明,Keras 和 TensorFlow 是可以调和共处的。

固然自一年多之前,TensorFlow 就宣称 Keras 将被并入 TensorFlow 的官方宣布版本中,但令我惊讶的是,仍有许多深度进修开拓者没故意识到,他们可以通过 tf.keras 子模块来挪用 Keras。更重要的是,Keras 与 TensorFlow 是无缝跟尾的,使得我们将 TensorFlow 的源代码直接写入 Keras 模子中。

在 TensorFlow 中团结 Keras 行使,会有双赢结果:

  1. 你可以行使 Keras 提供的简朴、原生 API 来建设本身的模子。
  2. Keras 的 API 相同于 scikit-learn 的,都可称为呆板进修的优质 API。
  3. Keras 的 API 是模块化的、基于 Python ,而且极其易于行使。
  4. 当你必要实现一个自界说的层或更伟大的丧失函数时,你可以深入行使 TensorFlow,将代码自动地与 Keras 模子相团结。

▌Keras 通过 tf.keras 模块构建到 TensorFlow 中

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

可以看到,我们通过引入 TensorFlow (tf) 并挪用 tf.keras,在 Python shell 中展示了 Keras 现实上是 TensorFlow 的一部门。

tf.keras 中的 Keras 应承我们行使尺度的 Keras 包获取下面这样简朴的前馈神经收集:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

接下来基于 TensorFlow 的一部门 —— tf.keras 子模块,来实现同样的收集:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

然而这是否意味着你必需行使 tf.keras?从而此刻放弃行使尺度 Keras 包了吗?虽然不是!

Keras 依然作为一个库,与 TensorFlow 分隔,举办独立操纵,以是仍存在将来两者会分隔的也许性;然而,我们知道 Google 官方同时支持 Keras 和 TensorFlow,分隔好像又是极不行能产生的。

但重点在于:

假如你更喜好只基于 Keras 来编程,那就这么做吧,往后可以一向云云。但假如你是 TensorFlow 用户,你应该开始思量 Keras API 了,由于:

  1. 它是基于 TensorFlow 建设的
  2. 它更易于行使
  3. 当你必要用纯 TensorFlow 实现特定机能或成果时,它可以直接用于你的 Keras。

▌示例数据集

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

CIFAR-10 数据集有10个类,我们用该数据集来展示本文的概念

为了简朴起见,我们就在 CIFAR-10 数据集上实习两个单独的卷积神经收集 (CNN),方案如下:

要领 1 :以 TensorFlow 作为后端的 Keras 模子

要领 2 :行使 tf.keras 中 Keras 子模块

在先容的进程中我还会展示怎样把自界说的 TensorFlow 代码写入你的 Keras 模子中。

CIFAR-10 数据集包罗10个单独的类,50,000 张实习图片和 10,000 张测试图片。

▌项目布局

我们可以在终端行使 tree 指令来查察该项目标布局:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

pyimagesearch 模块被包罗在与收集条目相干的下载中。它不能通过 pip 来安装,但包括在 "Downloads"后的功效中。我们先回首一下该模块中两个重要的 Python 文件:

  • minivggnetkeras.py:此文件是基于 Keras 实现的 MiniVGGNet 收集,一个基于 VGGNet 的深度进修模子。
  • minivggnettf.py:此文件是基于 TensorFlow + Keras (如 tf.keras)实现的 MiniVGGNet 收集。

该项目标根目次包括两个 Python 文件:

  • train_network_keras.py:用 Keras 实现的实习剧本;
  • train_network_tf.py: TensorFlow + Keras 实现必要的实习剧本,与前者基内情同;但我们仍会举办声名,并标出差异之处。

每个剧本城市天生各自实习的 accuracy 和 loss 曲线:

  • plot_keras.png
  • plot_tf.png

接下来就会向各人先容基于 Keras 和 TensorFlow + Keras (tf.keras) 实现的 MiniVGGNet 收集和他们的实习进程。

▌用 Keras 实习一个神经收集

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

用 Keras 实现的一个 miniVGGNet 卷积神经收集布局

实习我们收集的第一步是在 Keras 中构建收集的架构。

假如你已经认识 Keras 实习神经收集的基本常识,那么我们就开始吧 (假如你对此并不相识的话,请参考相干的先容性文章)。

相干链接:https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/

起首,打开 minivggnetkeras.py 文件并插入以下代码:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

从导入一系列所需的 Keras 库开始构建模子。

然后,界说一个的 MiniVGGNetKeras 类:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

我们在第 12 行界说了 build 要领,并界说 inputShape 和 input 参数。 我们假定以 channel last 的法则排序,以是 inputShape 参数中最后一个值应该对应的是 depth 值。

下面开始界说卷积神经收集的主体布局:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

从上面这段代码你可以调查到我们在每次应用池化 (pooling) 之前都堆叠了一系列卷积 (conv2D),ReLU 激活函数和批类型化层 (batch normalization),以低落卷积操纵后的空间维度。另外,我们还行使 Dropout 技能来防备模子的过拟合征象。

对付图层范例和有关术语的常识,可以参考早年的 Keras 教程https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/假如想深入研究的话,保举书“Deep Learning for Computer Vision with Python ”https://www.pyimagesearch.com/deep-learning-computer-vision-python-book/

然后,将全毗连层 (FC) 添加到收集布局中,代码如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

我们将 FC 层和 Softmax 分类器添加到收集中。随后我们界说神经收集模子并将其返回给回调函数 (calling function)。

此刻我们已经在 Keras 中实现了 CNN 模子的界说。下面,我们建设用于实习该模子的措施剧本。

打开 train_network_keras.py 文件并插入以下代码:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

我们起首在代码的第 2-13 行导入我们模子逊??需的包。

必要留意的是:

  • 在第 3 行,将 Matplotlib 的后端配置为 Agg,以便我们可以能将实习图生涯为图像文件。
  • 在第 6 行,我们导入 MiniVGGNetKeras 类。
  • 我们行使 scikit-learn 库中的 LabelBinarizer 要领举办独热编码 (one-hot encoding),并行使其 classification_report 要领打印出分类精度统计功效 (别离对应第 7 行和第 8 行)。
  • 我们在第 10 行导入逊??需的数据库。
怎样行使自界说的数据集,可参考https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/https://www.pyimagesearch.com/2018/04/16/keras-and-convolutional-neural-networks-cnns/

另外,我们还在第 16-19 行理会了一个呼吁行参数 (输出 --plot path)。

下面我们就加载 CIFAR-10 数据集,并对标签举办编码操纵,代码如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在第 24 行和第 25 行中,我们别离加载并提取实习和测试所需的数据,同时在第 26 和 27 行将数据举办 floating point + scale 转化。

第 30-36 行我们对标签举办编码并初始化真实的 labelNames。

模子界说和数据集导入的事变都已经完成。此刻可以开始实习我们的模子,代码如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在第 40-46 行,我们配置实习进程所需的一些参数和模子优化要领。

然后在第 47-50 行,我们行使 MiniVGGNetKeras.build 要领初始化我们的模子并举办编译。

最后,在第 54 和 55 行启动模子的实习措施。

下面,我们将对收集模子举办评估并天生一个功效图:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在这里,我们操作测试数据来评估我们的模子,并天生 classification_report。最后,我们将评估功效集成并导出功效图。

必要留意的是,凡是在这里我们会将模子序列化并导出我们的模子,以便可以在图像或视频处理赏罚剧本中行使它,但在这篇教程中我们不先容这部门的内容。

假如你想要运行以上的剧本,请确认下载本文的源代码。

然后,打开一个终端并执行以下呼吁就可以用 Keras 实现一个神经收集:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在我的电脑 cpu 上运行每个实习 epoch 只必要 5 多分钟。实习功效图如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

用 Keras 实现的神经收集模子,以 Matplotlib 画出实习进程的 accuracy/loss 曲线

正如我们从上面终端的输出看到那样,我们的模子取得75%的精确度。固然这不是最先辈的模子,但它能比随机揣摩 (1/10) 要好得多。

对比起小型的神经收集,我们模子的功效现实上长短常好的!

另外,正如我们在输出图6中所示,我们模子并不会产生过拟合征象。

▌用 Tensorflow 和 tf.keras 实习一个神经收集模子

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

行使 tf.keras (内置于 TensorFlow 中的模块) 构建的 MiniVGGNet CNN 架构与我们直接行使 Keras 构建的模子是沟通的。在此,出于演示的目标,我改变了个中的激活函数,其他的布局都是沟通的。

上面我们已经可以或许行使 Keras 库实现并实习了一个简朴的 CNN 模子。接下来,我们要做的是:

1.进修怎样行使 TensorFlow 中的 tf.keras 模块实现沟通的收集架构

2.在我们的 Keras 模子中包括一个 TensorFlow 激活函数,而该函数未在Keras中实现。

下面,让我们开始吧。

起首,打开 minivggnettf.py 文件,我们将实现 TensorFlow 版的 MiniVGGNet 模子,代码如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在这个 .py 文件中,请留意第 2 行我们必要导入所需的 tensorflow 依靠库,而 tensorflow 中自带 tf.keras 子模块,该子模块包括我们可以直接挪用的全部 Keras 成果。

在模子界说中,我行使 Lambda 层,如代码中的黄色突出表现,它可以用于插入自界说激活函数 CRELU (Concatenated ReLUs),

激活函数 CRELU 是由 Shang 等人在论文“Understanding and Improving Convolutional Neural Network”中所提出。

CRELU 激活函数在 Keras 中没有响应的实现,可是在 TensorFlow 中可以。你可以在 TensorFlow 中的 tf.keras 模块,行使一行代码来将 CRELU 函数添加到我们的 Keras 模子中。

还必要留意的是:CRELU 函数有两个输出,一个 positive ReLU 和一个 negative ReLU,二者毗连在一路。对付正值 x,CRELU 函数的返回值是 [x,0];而对付负值 x,CRELU 函数的返回值是 [0,x]。有关该函数的具体先容可以参考 Shang 等人的论文。

接下来,我们将用 TensorFlow + Keras 来界说用于实习 MiniVGGNetTF 模子的措施。打开 train_network_tf.py 并插入如下代码:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在 2-12 行,我们导入实习进程所需的依靠库。与我们之前的 Keras 版的实习剧本对比,独一的变革在于我们导入了 MiniVGGNetTF 类及 tensorflow as tf 而不是行使 Keras。而在第 15-18 行是我们的呼吁行参数理会部门。

和之前一样,我们在第 23 行加载模子逊??需的数据。剧本剩余的部门和之前 Keras 版的实习进程是一样的,即提取并疏散实习和测试集数据并编码我们的标签。

下面,让我们开始实习我们的模子,代码如下:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

在第 39-54 行,是与 Keras 版实习进程差异的处所,我们用黄色突出表现,别的部门都是沟通的。

在第 58-73 行,我们用测试数据评估我们的模子并绘制最终的功效。

正如你所看到的,我们只是改换了所行使的要领 (行使 tf.keras),实现了险些一样的实习流程。

然后,打开一个终端并执行以下呼吁就可以行使 tensorflow + tf.keras 实习一个神经收集模子:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

实习完成后,你可以获得如上相同的实习功效图:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?

用 Tensorflow + tf.keras 实现的神经收集模子,以 Matplotlib 画出实习进程的 accuracy/loss 曲线

可以看到,我们用 CRELU 取代原有的 RELU 激活函数,得到 76% 的精确率; 然而,1% 的精确性晋升增进也许是因为收集中权重的随机初始化导致的,这还需举办交错验证尝试来进一步证明 CRELU 激活函数是否确实可以或许晋升模子的精确性。虽然,原始精度并不是本节所重点存眷的内容。

相反,更必要我们留意的是,如安在 Keras 模子内部,用 TensorFlow 的激活函数替代尺度 Keras 激活函数!

另外,你也可以行使自界说的激活函数、丧失/本钱函数或图层来执行以上沟通的操纵。

▌总结

在本日的文章中,关于 Keras 和 TensorFlow 我们首要接头了以下几个题目:

  • 我是否应该在我的项目中行使 Keras 或 TensorFlow?
  • TensorFlow 比 Keras 要好吗?
  • 我是否要花时刻进修 TensorFlow 可能 Keras?

最终,我们发明,试图在 Keras 和 TensorFlow 之间作出决议酿成一个越来越无关紧急的题目。Keras 库已经通过 tf.keras 模块直接集成到 TensorFlow 中了。

本质上来说,你可以通过易于行使的 Keras API 来编码模子和实习进程,然后用纯 TensorFlow 举办自界说实现。

以是,假如你正筹备开始进修深度进修,或在纠结下一个项目是“用 Keras 照旧 TensorFlow ?”或就是在思索他们两者间“谁更好?”这些题目,此刻正是探求谜底和动力的时辰了,而我给你的提议很是简朴:

  1. 不多说,先开始!
  2. 在你的 Python 项目中输入 import keras 可能 import tensorflow as tf (这样你就可以会见 tf.keras 了)然后开始后续的事变。
  3. TensorFlow 可以直接集成到你的模子和实习进程中,以是不消去较量特征,成果或易用性,你都可以直接在项目中行使 TensorFlow 或 Keras。

▌读者的疑问

对此,有读者提出了厉害的疑问:

Keras照旧TensorFlow?措施员该怎样选择深度进修框架?
按照上述以及我的相识,不少开拓者仍胶葛在 Keras 和 TensorFlow 毕竟是什么的题目,也许对此我也不甚相识,但我照旧但愿提出一些澄清性的题目:一是在这二者中,将一个视为计较引擎,另一个作为一种器材包是否正确?假如这样的话,我揣摩 TensorFlow 是器材包而 Keras 是计较后端?二是你也提到 TensorFlow 与 Caffe 的整合,但为了支持 Keras 已经放弃了 Caffe。您能分享您为什么会这样的缘故起因吗?是 Caffe不再可用,照旧由于 Keras 有了更多成果?

对此,Adrian Rosebrock 回应道:

是的,Keras 自己依靠于 TensorFlow、Theano、CNTK 等后端来执行现实的计较。Caffe 仍存在,只是其他成果已经解析为 Caffe2 。TensorFlow 从未成为 Caffe 的一部门。我们仍行使 Caffe,尤其是研究职员。但从颐魅者尤其是 Python 的从颐魅者更喜好编程友爱的库如 TensorFlow、Keras、PyTorch 或 mxnet。

对此,你又有何疑问或观点呢?接待留言。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读