作为TensorFlow的底层语言,你会用C+构建深度神经网络吗?

选自Matrices.io

作者:Florian Courtial

机器之心编译

参与:李泽南、蒋思源

很多人都知道 TensorFlow 的核心是构建在 C++之上的,但是这种深度学习框架的大多数功能只在 Python API 上才方便使用。

当我写上一篇文章的时候,我的目标是仅使用 TensorFlow 中的 C++ API 和 CuDNN 来实现基本的深度神经网络(DNN)。在实践中,我意识到在这个过程中我们忽略了很多东西。

注意,使用外部操作(exotic operations)训练神经网络是不可能的,你面临的错误最有可能就是缺少梯度运算。目前我正在试图将 Python 上的梯度运算迁移到 C++上。

在本文中,我将展示如何使用 TensorFlow 在 C++ 上构建深度神经网络,并通过车龄、公里数和使用油品等条件为宝马 1 系汽车进行估价。目前,我们还没有可用的 C++ 优化器,所以你会看到训练代码看起来不那么吸引人,但是我们会在未来加入的。

本文章遵从 TensorFlow 1.4 C++ API 官方指南:https://www.tensorflow.org/api_guides/cc/guide

代码 GitHub:https://github.com/theflofly/dnn_tensorflow_cpp

安装

我们会在 C++ 中运行 TensorFlow 框架,我们需要尝试使用已编译的库,但肯定有些人会因为环境的特殊性而遇到麻烦。从头开始构建 TensorFlow 将避免这些问题,同时确保使用的是最新版本的 API。

首先,你需要安装 bazel 构建工具,这里有安装方法:https://docs.bazel.build/versions/master/install.html

在 OSX 上 brew 就足够了:

你需要从 TensorFlow 源文件开始构建:

随后你需要进行配置,如选择是否使用 GPU,你需要这样运行配置脚本:

现在我们要创建接收 TensorFlow 模型代码的文件。请注意,第一次构建需要花费很长一段时间(10-15 分钟)。非核心的 C++ TF 代码在 /tensorflow/cc 中,这是我们创建模型文件的位置,我们也需要 BUILD 文件让 bazel 可以构建模型。

我们在 BUILD 文件中加入 bazel 指令:

基本上,它会使用 model.cc 构建一个二进制文件。现在,我们可以开始编写自己的模型了。

读取数据

这些数据从法国网站 leboncoin.fr 上摘取,随后被清理和归一化,并被存储于 CSV 文件中。我们的目标是读取这些数据。经归一化的源数据被存储在 CSV 文件的第一行,我们需要使用它们重构神经网络输出的价格。所以,我们创建 data_set.h 和 data_set.cc 文件来保持代码清洁。它们从 CSV 文件中生成一个浮点型的二维数组,并用于馈送到神经网络。

data_set.h

data_set.cc

我们必须在 bazel BUILD 文件中添加这两个文件。

构建模型

第一步是读取 CSV 文件,并提取出两个张量,其中 x 是输入,y 为预期的真实结果。我们使用之前定义的 DataSet 类。

本文来自企鹅号 - 机器之心媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

几行Python代码生成饭店营业额模拟数据并保存为CSV文件

CSV文件是一种通用的、简单的文件格式,以纯文本形式存储表格数据(数字和文本),在多个领域都有广泛应用,经常用来在不同程序之间交换数据。 下面的代码使用Pyth...

43890
来自专栏PPV课数据科学社区

TensorFlow必知基础知识​

TensorFlow概要 Google第一代分布式机器学习框架DistBelief1,在内部大规模使用后并没有选择开源。而后第二代分布式机器学习系统Tenso...

45660
来自专栏CDA数据分析师

谷歌教你学 AI-第四讲部署预测模型

翻译/校对: Mika 本文为 CDA 数据分析师原创作品,转载需授权 Google Cloud发布了名为"AI Adventures"的系列视频,用简单易懂的...

27960
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯TMQ】看图测试指南:图像识别在测试中的应用

也许我们使用过Uiautomator或Monkey来进行系统的测试。但在使用过程中总出现用Uiautomator没法识别、用Monkey无法法复现等问题……本文...

73500
来自专栏机器之心

资源 | 基于TensorFlow和Sonnet,DeepMind开源可微神经计算机实现包

选自Github 机器之心编译 参与:蒋思源 去年 DeepMind 在自然期刊上曾介绍过一种记忆增强式的神经网络形式-可微神经计算机。而近日,DeepMin...

30830
来自专栏AI研习社

运用 MXNet Scala API 接口进行图像分类(附代码)

随着 MXNet 1.2.0 版本的发布,新的 MXNet Scala API 接口也发布了。这次发布的 Scala,里面的推理应用程序致力于优化开发者体验。S...

11510
来自专栏机器之心

教程 | 如何在浏览器使用synaptic.js训练简单的神经网络推荐系统

40440
来自专栏大数据智能实战

DrQA实践

2017年七月份Facebook开源了其开放域问答系统DrQA的代码。关于DrQA,还有一篇2017年发表在ACL上的论文《Reading Wikipedi...

33450
来自专栏SIGAI学习与实践平台

【免费线上实践】动手训练模型系列:条件GAN

从无序的输出到按照类别输出,Conditional Generative Neural Networks到底借助了什么样的魔(xin)法(xi)?点击下方小程序...

14850
来自专栏AI研习社

问答 | tensorflow 怎么配置非数据并行分布式?

假设模型有两个conv层和1个fc层,有3台服务器每台各一块显卡,请问要怎么实现把计算图拆成3部分,每块显卡分别计算一个层,而不是把计算图完整复制3份放到3块卡...

26230

扫码关注云+社区

领取腾讯云代金券