一. TensorFlow 的发展历程
近几年,随着深度学习技术的快速发展,诞生了 Torch、Theano、Caffe、MxNet 等一批深度学习库,而 TensorFlow 正是这些框架中的佼佼者,得益于其 优秀的架构设计理念及工程实现,以及丰富的学习资料,目前 TensorFlow 已经超越 Caffe(目前已经不怎么更新了) 成为使用率最高的DL框架,大有成为机器学习领域的Android之势。
TensorFlow 优势
在于强大的分布式计算能力,相较于 Caffe 等传统单机版系统有不可比拟的优势,这得益于Google在分布式计算层面的技术优势。另外,对于Android系统的原生支持 也给 TensorFlow 带来了庞大的用户量。
TensorFlow 由Google 工程大神
Jeff Dean
领衔开发。字面意思来看,Tensor(张量)表示N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow 为张量从流图的一端流动到另一端计算过程。
二. TensorFlow 版本、SDK
TensorFlow 目前版本为 1.8.0。
主要支持 python/C++ 接口,1.5及以后版本只支持CUDA9.0,另外也可以选择 R、Go 语言API(需要第三方支持) 以及 Keras,不作为讨论内容。
官网地址:
https://www.
www.tensorflow.org/versions
GitHub:
https://
https://github.com/tensorflow/tensorflow/releases
三. 模块结构
TensorFlow 分为
Front End
和
Exec System
,
Front End
是指 API接口,
Exec System
对应Work执行。层次结构图示意如下:
对应模块描述为:
模块组成功能说明备注 Client
主要用于计算图构造,并调用后端的Runtime,进行计算图的执行;
Runtime Master
负责总体计算任务分配及合并,包括:
A) 接收前端Session数据,优化计算图(消除冗余计算,常量折叠等);
B) 拆分任务,将计算图分裂为子图,发送给Work;
C) 协同任务,得到计算结果;
Worker
A) 根据图节点的依赖,调用Kernel完成计算;
B) 将计算结果发送到其他Worker;
C) 接受来自其他Worker的计算结果; 执行实际计算
Kernel
根据当前可用的硬件环境(GPU/CPU),执行OP计算
OP计算是指对不同硬件的统一封装调用,属于一种多态应用技术。CPU, GPU, Arm, X86
Device 设备网络层
支持硬件封装 - CPU GPU Android IOS
支持网络通信 - gRPC RDMA
四. 认识数据流图
TensorFlow 通过数据流图进行计算,何为数据流图? 来看个例子(左图是一个典型的计算图,右图描述计算过程):
数据流图
是 用
Node(结点)
和
Edge(边)
的有向图来描述数学计算:
Node
用来表示
输入/输出 数据
(对应
起始终止点
),也就是
Tensor - 张量
,对应左图圆形;
也用来表示
数学操作
,对应左图矩形。
Edge
表示
Node
之间的输入/输出关系,计算过程即
数据流动过程 - Flow
。
左图公式对应TensorFlow代码(先熟悉一下):
import tensorflow as tf
b = tf.Variable( tf.zeros([100]) ) # 100-d vector, init to 0 W = tf.Variable( tf.random_uniform([784,100],-1,1) ) # 784*100 matrix W/rnd vals x = tf.nn.relu(tf.matmul(W, x) + b) # Relu(W * x +b) C = [...] #Const computed as a function
s = tf.Session() for step in xrange(0, 10):
input = ...construct 100-D input array ... # Create 100-d vector for input
result = s.run(C, feed_dict={x: input} ) # Fetch cost,feeding x=input
print step, result
五. TensorFlow 的学习步骤
大多数Blog 只是人云亦云,以转载抄袭为主,参考价值不大,作者在整理资料的同时(
Blog仅作为本人学习和备忘,请勿转载
),给初学者的学习思路如下:
1)看书 or 少数有价值的Blog
市场上很多书都是骗钱的,某某号称TensorFlow工程总监推荐,销量榜很高,作为菜鸟级的初步了解尚可,实际用作用不大,当然这个也根据个人实际情况,做好甄别和筛选。
另外Blog 也不少,一搜一大把,凑热闹的居多,不置可否。
2)教程
个人认为最好的入门工具还是官方的白皮书,不需要花钱,很多书和教程都是由此而来,有的改都没改。
同时可以在本公众号后回复“
教程
”,即可看到高质量的视频教程~大神带你入门带你飞
3)代码
代码是学习最好的帮手,这个不需要质疑,Github上Down下来代码,自己Run例子。
你需要了解里面的 模块结构 和 类划分,这对于理解框架以及熟练使用是很有帮助的。
4)学好工具的使用
一定要熟练掌握 TensorFlow 的工具,特别是可视化工具 TensorBoard,作者会在后面拿出一章进行讲解。
另外,要掌握相关调试方法(后续文章也会介绍)。
往期精彩回顾
Google家的”撩书“与学习英语利器!
【重磅】TensorFlow中文社区论坛上线啦!
深度学习与神经网络概述