tensorflow可视化工具库tensorboard使用方法详解
Posted wendy_ya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow可视化工具库tensorboard使用方法详解相关的知识,希望对你有一定的参考价值。
目录
本文将对tensorboard进行基本介绍,介绍其相应语法并进行示例展示。最后进行相关注意事项的说明。本文基于tensorflow1.(tensorflow1.15)。
为方便起见,本文只介绍迭代轮数的变化情况(scalar),而不对计算图的网络结构(graph)和仪表盘进行介绍。
一、Tensorboard介绍
对大部分人而言,深度神经网络就像一个黑盒子,其内部的组织、结构、以及其训练过程很难理清楚,这给深度神经网络原理的理解和工程化带来了很大的挑战。为了解决这个问题,tensorboard应运而生。Tensorboard是tensorflow内置的一个可视化工具,它通过将tensorflow程序输出的日志文件的信息可视化使得tensorflow程序的理解、调试和优化更加简单高效。Tensorboard的可视化依赖于tensorflow程序运行输出的日志文件,因而tensorboard和tensorflow程序在不同的进程中运行。
二、重要语法功能
2.1 tf.summary.FileWriter
该语句用于指定一个文件用来保存图。
语法格式:
tf.summary.FileWriter(logdir, graph=None, flush_secs=120, max_queue=10)
2.2 tf.summary.merge_all
该语句可以将定义的所有summary都保存在日志中,以便tensorboard进行显示。如果没有特殊需要,一般都采用这种方法收集所有要显示的信息。
语法格式:
tf.summaries.merge_all(key='summaries')
应用大多数情况下括号中啥也不写。
2.3 tf.global_variablesinitializer
该语句用于初始化全局变量,并返回一个初始化所有全局变量的操作。一般在模型构建完毕并在会话中加载后,执行此初始化操作。当然也可通过feed_dict初始化,不过这样只初始化feed_dict列表中的变量。
语法格式:
init = tf.global_variables_initializer()
2.4 tf.summary.scalar
该语句用于显示标量信息。记录一个标量,之后产出这个标量和迭代次数i之间关系的曲线图
语法格式:
tf.summary.scalar('name/sub_name',scalar_val)
三、代码详解
完整代码示例如下:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# 准备训练数据,假设其分布大致符合 y = 1.2x + 0.0
n_train_samples = 200
X_train = np.linspace(-5, 5, n_train_samples) # (200,)
Y_train = 1.2*X_train + np.random.uniform(-1.0, 1.0, n_train_samples) # 加一点随机扰动(200,)
# 准备验证数据,用于验证模型的好坏
n_test_samples = 50
X_test = np.linspace(-5, 5, n_test_samples) # (50,)
Y_test = 1.2*X_test # (50,)
# 参数学习算法相关变量设置
learning_rate = 0.01
batch_size = 20
summary_dir = 'logs'
print('~~~~~~~~~~开始设计计算图~~~~~~~~')
# 使用 placeholder 将训练数据/验证数据送入网络进行训练/验证
# shape=None 表示形状由送入的张量的形状来确定
with tf.name_scope('Input'):
X = tf.placeholder(dtype=tf.float32, shape=None, name='X')
Y = tf.placeholder(dtype=tf.float32, shape=None, name='Y')
# 决策函数(参数初始化)
with tf.name_scope('Inference'):
W = tf.Variable(initial_value=tf.truncated_normal(shape=[1]), name='weight')
b = tf.Variable(initial_value=tf.truncated_normal(shape=[1]), name='bias')
Y_pred = tf.multiply(X, W) + b
# 损失函数(MSE)
with tf.name_scope('Loss'):
loss = tf.reduce_mean(tf.square(Y_pred - Y), name='loss')
tf.summary.scalar('loss', loss) # 注意事项!!!!!!!!!!!!!
# 参数学习算法(Mini-batch SGD)
with tf.name_scope('Optimization'):
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
# 初始化所有变量
init = tf.global_variables_initializer()
# 汇总记录节点
merge = tf.summary.merge_all() # 将定义的所有summary都保存在日志中,以便tensorboard进行显示
# 开启会话,进行训练
with tf.Session() as sess:
sess.run(init)
summary_writer = tf.summary.FileWriter(logdir=summary_dir, graph=sess.graph) # 指定文件以保存图
for i in range(201):
j = np.random.randint(0, 10) # 总共200训练数据,分十份[0, 9]
X_batch = X_train[batch_size*j: batch_size*(j+1)] # batch
Y_batch = Y_train[batch_size*j: batch_size*(j+1)]
_, summary, train_loss, W_pred, b_pred = sess.run([optimizer, merge, loss, W, b], feed_dict=X: X_batch, Y: Y_batch)
test_loss = sess.run(loss, feed_dict=X: X_test, Y: Y_test)
# 将所有日志写入文件
summary_writer.add_summary(summary, global_step=i) # 将训练过程数据保存在summary中[train_loss]
print('step:, losses:, test_loss:, w_pred:, b_pred:'.format(i, train_loss, test_loss, W_pred[0], b_pred[0]))
if i == 200:
# plot the results
plt.plot(X_train, Y_train, 'bo', label='Train data') # blue o
plt.plot(X_test, Y_test, 'gx', label='Test data') # green x
plt.plot(X_train, X_train * W_pred + b_pred, 'r', label='Predicted data') # red line
plt.legend()
plt.show()
summary_writer.close()
运行结果如下:
利用tensorboard查看logs目录下可视化图像:train_loss
四、注意事项
4.1 TypeError: Fetch argument None has invalid type <class ‘NoneType’>
tf.summary.merge_all()要写在tf.summary.scalar()等方法之后,不然会报**TypeError: Fetch argument None has invalid type<class ‘NoneType’>**的错。
4.2 Windows无法正常显示Tensorboard
windows无法正常显示tensorboard的解决方案可以参考文章:https://www.lmlphp.com/user/117206/article/item/2560095/。
4.3 显示杂乱
如果发现有一些层链接的关系比较恶心,可以考虑用name_scope简化显示,如上方代码所示。
参考文章:
以上是关于tensorflow可视化工具库tensorboard使用方法详解的主要内容,如果未能解决你的问题,请参考以下文章
tensorflow可视化工具库tensorboard使用方法详解
tensorflow的可视化工具tensorboard的启动教程