天天看点

tensorflow(七)---可视化工具TensorBoard的使用

tensorflow—可视化工具TensorBoard的使用

一、TensorBoard介绍

1.TensorBoard使用流程

可视化的数据是数据流图和张量,题目需要在会话中加载或执行操作后才能获取。然后用户需要使用

FileWriter

实例将这些数据写入事件文件。最后,启动

TensorBoard

加载事件文件中的序列化数据,从而可以在各个面板中展示对应的可视化对象。

TensorBoard

使用流程:

tensorflow(七)---可视化工具TensorBoard的使用

TensorBoard

可视化工作流:

tensorflow(七)---可视化工具TensorBoard的使用

2.抽象结点

如果我们将所有的操作完全的加载到面板上,会显得整个数据流图非常的乱,无法一眼清晰的看出整个结构,这样很不方便。所以,我们将有些操作合并起来,取一个名字,生成一个抽象的结点,这些抽象的结点再在面板上可视化就显得结构清晰,不那么的乱。

tensorflow(七)---可视化工具TensorBoard的使用

上图左边是所有的结点都加载,右边是加载抽象结点,可以看见,右边明显要比左边好。

那么如何生成抽象结点呢?

with tf.name_scope('抽象结点名称'):

来实现, 比如,将X,Y变量的声明抽象为一个

input

操作:

with tf.name_scope('input'):
    # 输入 X, 形状[47, 3]
    X = tf.placeholder(tf.float32, X_data.shape)
    # 输出 Y, 形状[47, 1]
    Y = tf.placeholder(tf.float32, Y_data.shape)
           
二、TensorBoard使用

1.生成模型的可视化图

(1)不使用抽象结点的可视化

FileWriter(r"文件路径", sess.graph)

函数,使用该函数记得

close()

,拿之前的房价预测模型的例子:

alpha = 0.01  # 学习率 alpha = 0.01
epoch = 500  # 训练全局变量的轮数

# 创建线性回归模型(数据流图)

# 1.声明变量
# 输入 X, 形状[47, 3]
X = tf.placeholder(tf.float32, X_data.shape)
# 输出 Y, 形状[47, 1]
Y = tf.placeholder(tf.float32, Y_data.shape)
# 权重变量W,形状[3, 1] 就是训练参数
W = tf.get_variable('Www', (3, 1), initializer=tf.constant_initializer())  # 用tf.constant_initializer()设置参数的初始值,为常数,默认为1

# 2.假设函数 h(x) = w0*x0 + w1*x1 + w2*x2
# 推理值 Y_pred 形状[47, 1]
Y_pred = tf.matmul(X, W)

# 3.建立目标函数
# 损失函数为最小二乘法, Y_pred - Y是形如[47, 1]的向量
emp_op = 1 / (2 * len(X_data)) * tf.matmul((Y_pred - Y), (Y_pred - Y), transpose_a=True)

# 4.优化算法
# 采用梯度下降的优化算法
opt = tf.train.GradientDescentOptimizer(learning_rate=alpha)
# 单步训练操作
train_op = opt.minimize(emp_op)

# 5.创建会话(运行环境)
with tf.Session() as sess:
    # 初始化全局变量
    sess.run(tf.global_variables_initializer())
    # 填充数据
    for e in range(1, epoch + 1):
        sess.run(train_op, feed_dict={X: X_data, Y: Y_data})
        loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
        if e%10 == 0:
            loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
            print('epoch:{} \t loss={} \t Model: y={}*x2 + {}*x1 + {}'.format(e, loss[0][0], w[1][0], w[2][0], w[0][0]))
           

在anaconda prompt中使用

tensorboard --logdir="C:\Users\Dream^hao\tensorflow_study\study\chapter-4\summary\graph-1"

查看:

tensorflow(七)---可视化工具TensorBoard的使用

然后在浏览器中打开:

http://localhost:6006/

就可以看到可视化的图

生成的可视化图为:

tensorflow(七)---可视化工具TensorBoard的使用

(2)使用抽象结点后生成的代码:

alpha = 0.01  # 学习率 alpha = 0.01
epoch = 500  # 训练全局变量的轮数

# 创建线性回归模型(数据流图)

with tf.name_scope('input'):
    # 1.声明变量
    # 输入 X, 形状[47, 3]
    X = tf.placeholder(tf.float32, X_data.shape)
    # 输出 Y, 形状[47, 1]
    Y = tf.placeholder(tf.float32, Y_data.shape)

with tf.name_scope('hypotheis'):
    # 权重变量W,形状[3, 1] 就是训练参数
    W = tf.get_variable('Www', (3, 1), initializer=tf.constant_initializer())  # 用tf.constant_initializer()设置参数的初始值,为常数,默认为1

    # 2.假设函数 h(x) = w0*x0 + w1*x1 + w2*x2
    # 推理值 Y_pred 形状[47, 1]
    Y_pred = tf.matmul(X, W)

with tf.name_scope('loss'):
    # 3.建立目标函数
    # 损失函数为最小二乘法, Y_pred - Y是形如[47, 1]的向量
    emp_op = 1 / (2 * len(X_data)) * tf.matmul((Y_pred - Y), (Y_pred - Y), transpose_a=True)

with tf.name_scope('train'):
    # 4.优化算法
    # 采用梯度下降的优化算法
    opt = tf.train.GradientDescentOptimizer(learning_rate=alpha)
    # 单步训练操作
    train_op = opt.minimize(emp_op)

# 5.创建会话(运行环境)
with tf.Session() as sess:
    # 初始化全局变量
    sess.run(tf.global_variables_initializer())
    # 创建 FileWriter 实例
    writer = tf.summary.FileWriter('./summary/graph-1/', sess.graph)
    # 填充数据
    for e in range(1, epoch + 1):
        sess.run(train_op, feed_dict={X: X_data, Y: Y_data})
        loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
        if e%10 == 0:
            loss, w = sess.run([emp_op, W], feed_dict={X: X_data, Y: Y_data})
            print('epoch:{} \t loss={} \t Model: y={}*x2 + {}*x1 + {}'.format(e, loss[0][0], w[1][0], w[2][0], w[0][0]))
writer.close()
           

使用抽象结点后生成的可视化图为:

tensorflow(七)---可视化工具TensorBoard的使用

继续阅读