深度学习快速实践:TensorFlow
Posted 神机喵算
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习快速实践:TensorFlow相关的知识,希望对你有一定的参考价值。
写在之前:本书是翻译自<>,已获原作者授权。
作者写这本书的目的是为了快速实践深度学习。因此,读者应该有基本的机器学习知识和必要的数据知识。本书将采用主流的机器学习算法来进行tensorflow训练。
第一章将简短介绍TensorFlow代码和编程模型。
Tensorflow基本概念
本章将简短介绍TensorFlow代码和编程模型。学完本章后,期待读者会TensorFlow的package安装方法。
Tensorflow开源包
TensorFlow源于Google大脑团队的机器学习和深度神经网络研究。这个系统能够解决更广泛的机器学习问题。
TensorFlow使用计算图来表示一个计算任务。图中的节点代表数学运算,也可以表示数据的输入、输出和读写等操作;图中的边表示多维数组(Tensors),节点之间的某种联系。
TensorFlow使用计算图来构建计算过程,用符号来表示计算操作。这使得TensorFlow可以同时运用Linux 64位操作系统的CPU 和GPU 性能,TensorFlow也可以在移动端android 或者ios 上执行。
TensorFlow的可视化模块TensorBoard可监控算法的运行状态并显示。
TensorFlow Serving
Google最近开源了,TensorFlow Serving可以帮助机器学习开发者将他们的TensorFlow机器学习模型(可以扩展到其它各类型的机器学习模型)加载到产品中。TensorFlow Serving采用C++编写,并已开源到github。
TensorFlow和TensorFlow Serving到底有啥区别呢?
TensorFlow项目主要是基于各种机器学习算法构建模型,并为某些特定类型的数据输入做适应学习,而TensorFlow Serving则专注于让这些模型能够加入到产品环境中。开发者使用TensorFlow构建模型,然后TensorFlow Serving基于客户端输入的数据使用前面TensorFlow训练好的模型进行预测。
个人认为TensorFlow Serving是将tensorflow训练出来的模型更好的应用于生产环境中,通过它的API等支持的方式来方便对外提供稳定可靠的服务。TensorFlow Serving的意义就在于能够很方便的将深度学习生产化,解决了模型无法提供服务的弊端,并且用的是C++语言,性能上应该不错。这样以后深度学习方向的创业公司都能很方便的将产品商业化,保证7*24小时的可靠服务。
典型的pipeline:输入待训练的数据到学习者(Learner)中,输出训练模型。稍后模型验证之后发布到TensorFlow Serving系统。
对于生产环境来说,启动模型,随着时间不断迭代模型,新的训练数据出现需要训练优化模型,这些都是常态。现在有了TensorFlow Serving就可以在不停止服务的情况下更新模型和数据,Google内部许多pipelines一直在运行。
客户端和服务端之间的通信采用的是RPC协议实现,其为Google开源的一个高性能RPC框架。
安装TensorFlow
是时候开始练手了,你需要一遍看书一边在电脑上操作。
TensorFlow提供Python API(也可以用C / C ++),所以你得安装Python 2.7(具体咋安装自行Google)。
一般来讲,使用Python工作时最好用virtualenv虚拟环境。Virtualenv可以在一台机器不同的项目间保持Python依赖隔离。使用virtualenv安装TensorFlow不会覆盖已有的Python版本,这样做也能使排查安装问题变得更容易。
首先安装必备软件:
# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev python-virtualenv
# Mac OS X
$ sudo easy_install pip
$ sudo pip install --upgrade virtualenv
建立virtualenv环境. 为了将环境建在 ~/tensorflow 目录下, 执行:
$ virtualenv --system-site-packages ~/tensorflow
接下来激活virtualenv:
$ source ~/tensorflow/bin/activate # with bash
$ source ~/tensorflow/bin/activate.csh # with csh
(tensorflow)$
Once the virtualenv is activated, you can use pip to install TensorFlow inside it:
激活virtualenv后即可使用pip在virtualenv内安装TensorFlow:
# Ubuntu/Linux 64-bit, CPU only:
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
# Mac OS X, CPU only:
(tensorflow)$ sudo easy_install --upgrade six
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl
你可访问官方文档来确认所安装的版本。
如果你要在GPU上跑你的代码,你需要访问官方文档来看看是否满足指定的要求。运行Tensorflow GPU需要安装额外的软件。
当你使用完后可执行如下命令关闭虚拟环境:
(tensorflow)$ deactivate
其它安装TensorFlow的方法请访问官方网站获取信息。
TensorFlow的 “Hello World”
你可以使用任何文本编辑器编写python代码,然后保存为扩展名“.py”的文件(eg test.py)。用python命令行即可执行test.py。
为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:
import tensorflow as tf
a = tf.placeholder("float")
b = tf.placeholder("float")
y = tf.mul(a, b)
sess = tf.Session()
print sess.run(y, feed_dict={a: 3, b: 3})
在上面的代码中,导入Python模块tensorflow。然后定义符号变量,也称为占位符。在后面程序执行中会操作这些变量。我们把这些变量作为参数,TensorFlow的乘法函数tf.mul会调用。数学函数tf.mul会操作tensor,这时的动态大小、多维数组。
TensorFlow的算术操作如下:
tf.add,tf.sub,tf.mul,tf.div,tf.mod,tf.abs,tf.neg,tf.sign,tf.inv,tf.square,tf.round,tf.sqrt,tf.pow,tf.exp,tf.log,tf.maximum,tf.minimum,tf.cos,tf.sin
TensorFlow也为程序员提供一些函数来进行数学操作,列表如下:
操作 | 描述 |
---|---|
tf.diag | 给定对角线上的值,返回对角tensor |
tf.transpose | 转置 |
tf.matmul | tensor乘法,即矩阵乘法 |
tf.matrix_determinant | 方阵的行列式 |
tf.matrix_inverse | 方阵的逆矩阵 |
接下来,创建一个会话。事实上,直到这步还没有执行TensorFlow代码。程序通过Session()创建一个会话与Tensorflow库交互;直到调用run()方法才会创建会话,并运行指定的代码。在本例中,run()方法调用变量值和feed_dict参数,表达式运行完成退出会显示结果9 。
本例比较简单,仅仅为了展示TensorFlow完整的过程。然而,我们更感兴趣的是灵活的结构化代码,插入操作来构建计算图。比如,类似于Python编程中的IPython。为了达到这个目的,TensorFlow提供了tf.InteractiveSession()类。
编程模型的理解已经超出了本书的范围,但为了继续接下来的章节,我们仅仅需要知道计算结构包含所有的操作信息和数据。
上面的计算图描述的是数学计算。节点(node)代表数学操作,但是它们也可以代表数据项的点,输出结果或者读写持久化的变量。边(edge)描述的是输入和输出的节点之间的关系。
TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU). 一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测. 如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作.
并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进。大部分核相关的操作都是设备相关的实现,比如GPU。下面是一些重要的操作/:
操作分组 | 操作 |
---|---|
Maths | Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal |
Array | Concat, Slice, Split, Constant, Rank, Shape, Shuffle |
Matrix | MatMul, MatrixInverse, MatrixDeterminant |
Neuronal Network | SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool |
Checkpointing | Save, Restore |
Queues and syncronizations | Enqueue, Dequeue, MutexAcquire, MutexRelease |
Flow control | Merge, Switch, Enter, Leave, NextIteration |
TensorBoard:可视化学习
为了更方便TensorFlow 程序的理解,TensorFlow 包括从函数、调试与优化等方面进行了可视化,并发布了一套叫做TensorBoard 的可视化工具。TensorBoard 从不同统计数据来展现图计算过程的详细信息和参数。
TensorBoard模块的数据展示是在TensorFlow执行和汇总数据存储的过程。在TensorFlow的,你可以找到更详细的Python API的解释。
输入下面的指令来启动TensorBoard,包括跟踪(也可以成为序列化)的路径参数:
(tensorflow)$ tensorboard --logdir=<trace file>
TensorBoard 开始运行,你可以通过在浏览器中输入 来查看。TensorBoard可视化工具的详细使用已超出本书的范围,若想了解更多,可参见。
若发现以上文章有任何不妥,请联系我。
以上是关于深度学习快速实践:TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章
学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码
分享《21个项目玩转深度学习:基于TensorFlow的实践详解》PDF+源代码
分享《21个项目玩转深度学习:基于TensorFlow的实践详解》PDF+源代码
分享《21个项目玩转深度学习:基于TensorFlow的实践详解》PDF+源代码