可视化的数据是数据流图和张量,题目需要在会话中加载或执行操作后才能获取。然后用户需要使用FileWriter实例将这些数据写入事件文件。最后,启动TensorBoard加载事件文件中的序列化数据,从而可以在各个面板中展示对应的可视化对象。
TensorBoard使用流程: 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)(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"查看: 然后在浏览器中打开:http://localhost:6006/就可以看到可视化的图 生成的可视化图为:
(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()使用抽象结点后生成的可视化图为: