Tensorboard中的数据形式:
Tensorboard可以记录与展示以下数据形式:
标量Scalars;
图片Images;
音频Audio;
计算图Graph;
数据分布Distribution;
嵌入向量Embeddings。
Tensorboard的使用流程:
1、添加记录数据的节点:
使用tf.summary.scalar记录标量;
使用tf.summary.histogram记录数据的直方图;
使用tf.summary.distribution记录数据的分布图;
使用tf.summary.image记录图像数据;
如果有需要。在这一步中可以创建命名空间,将不同的变量归到不同的命名空间下。
如:
with tf.name_scope('summaries'):
# 计算参数的均值,并使用tf.summary.scaler记录
mean = tf.reduce_mean(var)
tf.summary.scalar('mean', mean)
2、汇总记录节点:
merged = tf.summary.merge_all()
3、创建一个运行图,并运行汇总节点,得到汇总的结果
with tf.Session() as sess:
summary = sess.run(merged)
4、日志书写器实例化,在实例化的同时传入 graph 将当前计算图写入日志:
summary_writer = tf.summary.FileWriter(logdir, graph=sess.graph)
5、调用日志书写器实例对象summary_writer
的add_summary(summary, global_step=i)
方法将所有汇总日志写入文件;
6、调用日志书写器实例对象summary_writer
的close()
方法写入内存,否则它每隔120s写入一次。
7、运行tensorboard读取保存的日志数据并显示出来:
如果 logdir 目录的子目录中包含另一次运行时的数据(多个 event),那么 TensorBoard 会展示所有运行的数据(主要是scalar),这样可以用于比较不同参数下模型的效果,调节模型的参数,让其达到最好的效果。
打开Anaconda prompt,激活tensorflow所在的环境,然后输入:
tensorboard --logdir=save_logdir
然后打开浏览器,输入http://127.0.0.1::6006
如果上面的命令无效,可以试试下面的指令:
tensorboard --logdir=save_logdir --host=127.0.0.1
即可显示出我们刚才添加的所有数据。
Tensorboard使用案例:
我们建立一个简单的神经网络,来使用Tensorboard工具。
代码如下:
import tensorflow as tf
import numpy as np
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
log_dir = "E:/logs/"
print("created log_dir path")
a = tf.placeholder(dtype=tf.float32, shape=[100, 1], name='a')
with tf.name_scope('add_example'):
b = tf.Variable(tf.truncated_normal([100, 1], mean=-0.5, stddev=1.0), name='var_b')
tf.summary.histogram('b_hist', b)
increase_b = tf.assign(b, b + 0.2)
c = tf.add(a, b)
tf.summary.histogram('c_hist', c)
c_mean = tf.reduce_mean(c)
tf.summary.scalar('c_mean', c_mean)
merged = tf.summary.merge_all()
train_writer = tf.summary.FileWriter(log_dir + '/train', sess.graph) # 保存位置
test_writer = tf.summary.FileWriter(log_dir + '/test', sess.graph)
sess.run(tf.global_variables_initializer())
for step in range(500):
if (step + 1) % 10 == 0:
_a = np.random.randn(100, 1)
summary, _ = sess.run([merged, increase_b], feed_dict={a: _a}) # 每步改变一次 b 的值
test_writer.add_summary(summary, step)
else:
_a = np.random.randn(100, 1) + step * 0.2
summary, _ = sess.run([merged, increase_b], feed_dict={a: _a}) # 每步改变一次 b 的值
train_writer.add_summary(summary, step)
train_writer.close()
test_writer.close()
print('END!')
运行该.py文件,然后在指定的路径下生成了日志文件:
打开Anaconda prompt,然后:
activate tensorflow-gpu
tensorboard --logdir=E:/logs/ --host=127.0.0.1
然后打开浏览器,输入http://127.0.0.1:6006