本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:CNTK在Keras上表现如何?能实现比TensorFlow更好的深

时间:2017-06-18 03:08来源:香港现场开奖 作者:开奖直播现场 点击:
参与:Jane W、吴攀 Keras 是由 François Chollet 维护的深度学习高级开源框架,它的底层基于构建生产级质量的深度学习模型所需的大量设置和矩阵代数。Keras API 的底层基于像 Theano 或谷歌

参与:Jane W、吴攀

Keras 是由 François Chollet 维护的深度学习高级开源框架,它的底层基于构建生产级质量的深度学习模型所需的大量设置和矩阵代数。Keras API 的底层基于像 Theano 或谷歌的 TensorFlow 的较低级的深度学习框架。Keras 可以通过设置 flag 自由切换后端(backend)引擎 Theano/TensorFlow;而不需要更改前端代

虽然谷歌的 TensorFlow 已广受关注,但微软也一直在默默地发布自己的机器学习开源框架。例如 LightGBM 框架,可以作为著名的 xgboost 库的替代品。例如几周前发布的 CNTK v2.0(Microsoft Cognitive Toolkit),它与 TensorFlow 相比,显示出在准确性和速度方面的强劲性能。参阅机器之心报道《开源 | 微软发行 Cognitive Toolkit 2.0 完整版:从性能更新到应用案例》。

CNTK v2.0 还有一个关键特性:兼容 Keras。就在上周,对 CNTK 后端的支持被合并到官方的 Keras 资源库(repository)中。

Hacker News 论坛对于 CNTK v2.0 也有评论(https://news.ycombinator.com/item?id=14470967),微软员工声称,将 Keras 的后端由 TensorFlow 改为 CNTK 可以显著提升性能。那么让我们来检验这句话的真伪吧。

在云端进行深度学习

在云端设置基于 GPU 的深度学习实例令人惊讶地被忽视了。大多数人建议使用亚马逊 AWS 服务,它包含所有可用的 GPU 驱动,只需参照固定流程(https://blog.keras.io/running-jupyter-notebooks-on-gpu-on-aws-a-starter-guide.html)设置远程操作。然而,j2直播,对于 NVIDIA Tesla K80 GPU,亚马逊 EC2 收费 $0.90/小时(不按时长比例收费);对于相同的 GPU,谷歌 Compute Engine(GCE)收费 $0.75/小时(按分钟比例收费),这对于需要训练许多小时的深度学习模型是非常显著的弱点。

要使用 GCE,你必须从一个空白的 Linux 实例中设置深度学习的驱动和框架。我使用 Keras 进行了第一次尝试(),但这并不有趣。不过,我最近受到 Durgesh Mankekar 文章(https://medium.com/google-cloud/containerized-jupyter-notebooks-on-gpu-on-google-cloud-8e86ef7f31e9)的启发,该文章采用了 Docker 容器这种更现代的方法来管理依赖关系,该文章还介绍了名为 Dockerfile 的安装脚本和容器与 Keras 必需的深度学习驱动/框架。Docker 容器可以使用 nvidia-docker 进行加载,这可以让 Docker 容器访问主机上的 GPU。在容器中运行深度学习脚本只需运行 Docker 命令行。当脚本运行完后,会自动退出容器。这种方法恰巧保证了每次执行是独立的;这为基准评估/重复执行提供了理想的环境。

我稍微调整了 Docker 容器(GitHub 网址 https://github.com/minimaxir/keras-cntk-docker),容器安装了 CNTK、与 CNTK 兼容的 Keras 版本,并设置 CNTK 为 Keras 的默认后端。

报码:CNTK在Keras上表现如何?能实现比TensorFlow更好的深

基准方法

Keras 的官方案例(https://github.com/fchollet/keras/tree/master/examples)非常全面,涉及多种现实中的深度学习问题,并能完美地模拟 Keras 在不同模型的性能。我选取了强调不同神经网络架构的几个例子(https://github.com/minimaxir/keras-cntk-benchmark/tree/master/test_files),并添加了一个自定义 logger,它能够输出含有模型性能和训练时间进程的 CSV 文件。

如前所述,只需要设置一个 flag 就能方便地切换后端引擎。即使 Docker 容器中 Keras 的默认后端是 CNTK,一个简单的 -e KERAS_BACKEND ='tensorflow' 命令语句就可以切换到 TensorFlow。

报码:CNTK在Keras上表现如何?能实现比TensorFlow更好的深

我写了一个 Python 基准脚本(https://github.com/minimaxir/keras-cntk-benchmark/blob/master/keras_cntk_benchmark.py)(在主机上运行)来管理并运行 Docker 容器中的所有例子,它同时支持 CNTK 和 TensorFlow 后端,并用 logger 收集生成的日志。

下面是不同数据集的结果。

IMDb 评论数据集

IMDb 评论数据集(~amaas/data/sentiment/)是用于情感分析的著名的自然语言处理(NLP)基准数据集。数据集中的 25000 条评论被标记为「积极」或「消极」。在深度学习成为主流之前,优秀的机器学习模型在测试集上达到大约 88% 的分类准确率。

第一个模型方法(imdb_bidirectional_lstm.py)使用了双向 LSTM(Bidirectional LSTM),它通过词序列对模型进行加权,同时采用向前(forward)传播和向后(backward)传播的方法。

首先,我们来看一下在训练模型时的不同时间点测试集的分类准确率:

报码:CNTK在Keras上表现如何?能实现比TensorFlow更好的深

通常,准确率随着训练的进行而增加;双向 LSTM 需要很长时间来训练才能得到改进的结果,但至少这两个框架都是同样有效的。

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容