有关TensorFlow与其他框架的详细对比可以阅读:
https://zhuanlan.zhihu.com/p/25547838
01 TensorFlow的编程模式
编程模式分为两种:命令式编程与符号式编程
前者是我们常用的C++,java等语言的编程风格如下
命令式编程看起来逻辑非常清晰,易于理解。而符号式编程涉及较多的嵌入和优化,如下
执行相同的计算时c,d可以共用内存,使用TensorFlow实现的语言如下
02 TensorFlow的基础结构
TF的基础模型主要包括三个部分,即Tensor(张量),Graph(图),Session(会话)
Tensor与Tensor之间可能有各种数学运算,所有的Tensor运算结构就是一张Graph,而Session负责和设备交互
为了更好的理解图和会话,可以把整个程序想象成高中化学经常碰到的串联反应装置
张量就像导管中流动的气体,操作就像是“加热、搅拌”等等。会话(Session)的作用是将图的某一部分运行起来
将上述过程类比到程序运行过程如下:
所以TF编程的基本流程即为:首先定义算法的计算图结构,再使用会话执行运算
03 Tensor(张量)
第零阶张量 (r = 0) 为标量 (Scalar),第一阶张量 (r = 1) 为向量 (Vector), 第二阶张量 (r = 2) 则成为矩阵 (Matrix),更高阶数则统一称为张量。
Tensor有两个基本属性即:数据类型dtype和形状shape。分为Constant(常量)、Variable(变量)、Placeholder(占位符)、SparseTensor(稀疏张量)
SparseTensor的概念类似线性代数里的稀疏矩阵概念。
稀疏矩阵:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
indices定义value中数值的下标索引
Tensor表示法:
基本编程模式:
import tensorflow as tf
# 创建一个常量 Operation(操作)
hw = tf.constant("Hello World! I love Tensorflow !")
# 启动一个Tensorflow的Session()
sess = tf.Session()
# 运行 Graph(计算图)
print(sess.run(hw))
# 关闭Session(会话)
sess.close()
04 可视化利器TensorBoard
使用TensorBoard可以输出像下面这样的流程图,使得程序变得可视化,使得程序结构非常清晰。
使用TensorBoard的步骤:
1.用TensorFlow保存图的信息到日志中
tf.summary.FileWriter("日志保存路径", sess.graph)
2.用TensorFlow读取并展示日志
tensorboard --logdir=日志所在路径
import tensorflow as tf
# 构造图(Graph)的结构
# 用一个线性方程的例子 y = w * x + b
w = tf.Variable(2.0, dtype=tf.float32, name="weight")
b = tf.Variable(1.0, dtype=tf.float32, name="bias")
x = tf.placeholder(dtype=tf.float32, name="input")
with tf.name_scope("output"): # 输出的命名空间
y = w * x + b
# 定义保存日志的路径
path = './log'
# 创建用于初始化所有变量的操作
init = tf.global_variables_initializer()
# 创建Session
with tf.Session() as sess:
sess.run(init) # 初始化变量
writer = tf.summary.FileWriter(path, sess.graph)
result = sess.run(y, {x: 3.0})
print("y = %s" % result)
命令行输入 tensorboard --logdir=log
双击output,可以看到计算表达式的结构