tensorflow—可视化工具TensorBoard的使用
一、TensorBoard介绍
1.TensorBoard使用流程
可视化的数据是数据流图和张量,题目需要在会话中加载或执行操作后才能获取。然后用户需要使用FileWriter
实例将这些数据写入事件文件。最后,启动TensorBoard
加载事件文件中的序列化数据,从而可以在各个面板中展示对应的可视化对象。
TensorBoard
使用流程:
TensorBoard
可视化工作流:
2.抽象结点
如果我们将所有的操作完全的加载到面板上,会显得整个数据流图非常的乱,无法一眼清晰的看出整个结构,这样很不方便。所以,我们将有些操作合并起来,取一个名字,生成一个抽象的结点,这些抽象的结点再在面板上可视化就显得结构清晰,不那么的乱。
上图左边是所有的结点都加载,右边是加载抽象结点,可以看见,右边明显要比左边好。
那么如何生成抽象结点呢?
用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"
查看:
然后在浏览器中打开: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()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84736.html