谷歌机器学习框架 ---- TensorFlow

有关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,可以看到计算表达式的结构

猜你喜欢

转载自blog.csdn.net/HNU_Csee_wjw/article/details/89284576