当前位置:香港六合彩2019年全年资料 > 取命令行 >

Keras和TensorFlow究竟哪个会更好?

  在这其中,TensorFlow 作为最为著名的用于深度学习生产环境的框架,它有一个非常强大的生态体系支持,然而,相比其他框架,TensorFlow 也有其劣势,如速度较慢、使用上手难。而基于 TensorFlow 基础上构建的 Keras 提供了简单易用的 API 接口,非常适合初学者使用。

  他给出的建议是先使用 Keras ,然后下载 TensorFlow 以获取可能需要的任何特定功能。文本中,Rosebrock展示了如何训练使用 Keras 的神经网络和使用直接构建在 TensorFlow 库中的 Keras+TensorFlow 集成(具有自定义功能)的模型。

  还是应该使用难度更大的 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 模型相结合。

  tf.keras 中的 Keras 允许我们使用标准的 Keras 包获取下面这样简单的前馈神经网络:

  然而这是否意味着你必须使用 tf.keras?从而现在放弃使用标准 Keras 包了吗?当然不是!

  Keras 依然作为一个库,与 TensorFlow 分开,进行独立操作,所以仍存在未来两者会分开的可能性;然而,我们知道 Google 官方同时支持 Keras 和 TensorFlow,分开似乎又是极不可能发生的。

  如果你更喜欢只基于 Keras 来编程,那就这么做吧,以后可以一直如此。但如果你是 TensorFlow 用户,你应该开始考虑 Keras API 了,因为:

  当你需要用纯 TensorFlow 实现特定性能或功能时,它可以直接用于你的 Keras。

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

  在介绍的过程中我还会展示如何把自定义的 TensorFlow 代码写入你的 Keras 模型中。

  pyimagesearch模块被包括在与网络条目相关的下载中。它不能通过 pip 来安装,但包含在 Downloads后的结果中。我们先回顾一下该模块中两个重要的 Python 文件:

  如果你已经熟悉 Keras 训练神经网络的基础知识,那么我们就开始吧 (如果你对此并不了解的话,请参考相关的介绍性文章)。

  从上面这段代码你可以观察到我们在每次应用池化 (pooling) 之前都堆叠了一系列卷积 (conv2D),ReLU 激活函数和批规范化层 (batch normalization),以降低卷积操作后的空间维度。此外,我们还使用 Dropout 技术来防止模型的过拟合现象。

  我们将 FC 层和 Softmax 分类器添加到网络中。随后我们定义神经网络模型并将其返回给回调函数 (calling function)。

  现在我们已经在 Keras 中实现了 CNN 模型的定义。下面,我们创建用于训练该模型的程序脚本。

  在第 3 行,将 Matplotlib 的后端设置为 Agg,以便我们可以能将训练图保存为图像文件。

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

  在第 24 行和第 25 行中,我们分别加载并提取训练和测试所需的数据,同时在第 26 和 27 行将数据进行 floating point + scale 转化。

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

  模型定义和数据集导入的工作都已经完成。现在可以开始训练我们的模型,代码如下:

  在这里,我们利用测试数据来评估我们的模型,并生成 classification_report。最后,我们将评估结果集成并导出结果图。

  需要注意的是,通常在这里我们会将模型序列化并导出我们的模型,以便可以在图像或视频处理脚本中使用它,但在这篇教程中我们不介绍这部分的内容。

  然后,打开一个终端并执行以下命令就可以用 Keras 实现一个神经网络:

  在我的电脑 cpu 上运行每个训练 epoch 只需要 5 多分钟。训练结果图如下:

  正如我们从上面终端的输出看到那样,我们的模型取得75%的准确度。虽然这不是最先进的模型,但它能比随机猜测 (1/10) 要好得多。

  使用 tf.keras (内置于 TensorFlow 中的模块) 构建的 MiniVGGNet CNN 架构与我们直接使用 Keras 构建的模型是相同的。在此,出于演示的目的,我改变了其中的激活函数,其他的结构都是相同的。

  上面我们已经能够使用 Keras 库实现并训练了一个简单的 CNN 模型。接下来,我们要做的是:

  在这个 .py 文件中,请注意第 2 行我们需要导入所需的 tensorflow 依赖库,而 tensorflow 中自带 tf.keras 子模块,该子模块包含我们可以直接调用的所有 Keras 功能。

  在模型定义中,我使用 Lambda 层,如代码中的黄色突出显示,它可以用于插入自定义激活函数 CRELU (Concatenated ReLUs),

  还需要注意的是:CRELU 函数有两个输出,一个 positive ReLU 和一个 negative ReLU,二者连接在一起。对于正值 x,CRELU 函数的返回值是 [x,0];而对于负值 x,CRELU 函数的返回值是 [0,x]。有关该函数的详细介绍可以参考 Shang 等人的论文。

  在 2-12 行,我们导入训练过程所需的依赖库。与我们之前的 Keras 版的训练脚本相比,唯一的变化在于我们导入了 MiniVGGNetTF 类及 tensorflow as tf 而不是使用 Keras。而在第 15-18 行是我们的命令行参数解析部分。

  和之前一样,我们在第 23 行加载模型训练所需的数据。脚本剩余的部分和之前 Keras 版的训练过程是一样的,即提取并分离训练和测试集数据并编码我们的标签。

  在第 39-54 行,是与 Keras 版训练过程不同的地方,我们用黄色突出显示,其余部分都是相同的。

  正如你所看到的,我们只是更换了所使用的方法 (使用 tf.keras),实现了几乎一样的训练流程。

  然后,打开一个终端并执行以下命令就可以使用 tensorflow + tf.keras 训练一个神经网络模型:

  可以看到,我们用 CRELU 代替原有的 RELU 激活函数,获得 76% 的准确率; 然而,1% 的准确性提升增加可能是由于网络中权重的随机初始化导致的,这还需进行交叉验证实验来进一步证明 CRELU 激活函数是否确实能够提升模型的准确性。当然,原始精度并不是本节所重点关注的内容。

  相反,更需要我们注意的是,如何在 Keras 模型内部,用 TensorFlow 的激活函数替换标准 Keras 激活函数!

  此外,你也可以使用自定义的激活函数、损失/成本函数或图层来执行以上相同的操作。

  在今天的文章中,关于 Keras 和 TensorFlow 我们主要讨论了以下几个问题:

  最终,我们发现,试图在 Keras 和 TensorFlow 之间作出抉择变成一个越来越无关紧要的问题。Keras 库已经通过 tf.keras 模块直接集成到 TensorFlow 中了。

  本质上来说,你可以通过易于使用的 Keras API 来编码模型和训练过程,然后用纯 TensorFlow 进行自定义实现。

  所以,如果你正准备开始学习深度学习,或在纠结下一个项目是“用 Keras 还是 TensorFlow ?”或就是在思考他们两者间“谁更好?”这些问题,现在正是寻找答案和动力的时候了,而我给你的建议非常简单:

  TensorFlow 可以直接集成到你的模型和训练过程中,所以不用去比较特性,功能或易用性,你都可以直接在项目中使用 TensorFlow 或 Keras。

  根据上述以及我的了解,不少开发者仍纠缠在 Keras 和 TensorFlow 究竟是什么的问题,可能对此我也不甚了解,但我还是希望提出一些澄清性的问题:

  一是在这二者中,将一个视为计算引擎,另一个作为一种工具包是否正确?如果这样的话,我猜测 TensorFlow 是工具包而 Keras 是计算后端?

  二是你也提到 TensorFlow 与 Caffe 的整合,但为了支持 Keras 已经放弃了 Caffe。您能分享您为什么会这样的原因吗?是 Caffe不再可用,还是因为 Keras 有了更多功能?

http://mjlynchlaw.com/quminglingxing/311.html
点击次数:??更新时间2019-06-16??【打印此页】??【关闭
  • Copyright © 2002-2017 DEDECMS. 织梦科技 版权所有  
  • 点击这里给我发消息
在线交流 
客服咨询
【我们的专业】
【效果的保证】
【百度百科】
【因为有我】
【所以精彩】