写在之前:本书是翻译自<first contact with 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 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版本,这样做也能使排查安装问题变得更容易。
首先安装必备软件:
建立virtualenv环境. 为了将环境建在 ~/tensorflow 目录下, 执行:
接下来激活virtualenv:
Once the virtualenv is activated, you can use pip to install TensorFlow inside it:
激活virtualenv后即可使用pip在virtualenv内安装TensorFlow:
你可访问官方文档来确认所安装的版本。
如果你要在GPU上跑你的代码,你需要访问官方文档来看看是否满足指定的要求。运行Tensorflow GPU需要安装额外的软件。
当你使用完后可执行如下命令关闭虚拟环境:
其它安装TensorFlow的方法请访问官方网站获取信息。
TensorFlow的 “Hello World”
你可以使用任何文本编辑器编写python代码,然后保存为扩展名“.py”的文件(eg test.py)。用python命令行即可执行test.py。
为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:
|
|
在上面的代码中,导入Python模块tensorflow。然后定义符号变量,也称为占位符。在后面程序执行中会操作这些变量。我们把这些变量作为参数,TensorFlow的乘法函数tf.mul会调用。数学函数tf.mul会操作tensor,这时的动态大小、多维数组。
TensorFlow的算术操作如下:
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,包括跟踪(也可以成为序列化)的路径参数:
|
|
TensorBoard 开始运行,你可以通过在浏览器中输入http://localhost:6006 来查看。TensorBoard可视化工具的详细使用已超出本书的范围,若想了解更多,可参见文档。
侠天,专注于大数据、机器学习和数学相关的内容,并有个人公众号:bigdata_ny分享相关技术文章。
若发现以上文章有任何不妥,请联系我。