美文网首页
[tf]tensorboard的使用

[tf]tensorboard的使用

作者: VanJordan | 来源:发表于2018-12-13 19:23 被阅读2次
tensorboard --logdir=./  --port=54321
# 然后在浏览器
http://127.0.0.1:54321

使用tf.summary.scalar记录标量数据,使用tf.summary.histogram直接记录变量var的直方图。

with tf.name_scope('summaries'):
    mean = tf.reduce_mean(var)
    tf.summary.scalar('mean', mean)
    tf.summary.scalar('histogram', var)

对tf.summary进行汇总

  • 使用tf.summary.merger_all()直接获取所有汇总操作Op,方便以后执行。
  • 然后,定义两个tf.summary.FileWriter(文件记录器)在不同的子目录,分别用来存放训练和测试日志数据,提网速差,将Session的计算图sess.graph加入训练过程的记录,这样在TensorBoardGRAPHS窗口就能展示整个计算如的可视化效果。
with tf.name_scope('summaries'):
    mean = tf.reduce_mean(var)
    tf.summary.scalar('mean', mean)
    tf.summary.scalar('histogram', var)
merged = tf.summary.merge_all()
train_writer = tf.summary.FileWriter(log_dir + '/train', sess.graph)
test_writer = tf.summary.FileWriter(log_dir + '/test')
  • writer.add_summary(data,step):添加数据。
  • tf.RunOptions:定义TensorFlow的运行选项,设置trace_levelFULL_TRACE,并使用tf.RunMetadata定义TensorFlow运行的元信息,这样可以记录训练时运算时间和内存占用等信息。再执行merged操作和train_step训练错做,将汇总的结果summary和训练元信息run_metadata添加到train_writer。平时则只执行merged操作和train_step操作,并添加到summarytrain_writer中,所有训练完成以后,关闭train_writertest_writer
for i in range(max_steps):
    if i % 10 == 0:
        accuracy = sess.run(model.accuracy, feed_dict=feed_dict)
        test_writer.add_summary(accuracy, i)
    else :
        if i % 100 == 99:
            run_options = tf.RunOptions(trace_level = tf.RunOptions.FULL_TRACE)
            run_metadata = tf.RunMetadata()
            summary,_ = sess.run([merged, train_step],feed_dict = feed_dict(True),
                                 options = run_options, run_metadata = run_metadata)
            train_writer.add_run_metadata(run_metadata, 'step%03d' % i )
            train_writer.add_summary(summary, i )
            saver.save(sess, log_dir + '/model.ckpt', i)
        else:
            summary,_ = sess.run([merged, train_step], feed_dict = feed_dict(True))
            train_writer.add_summary(summary, i)
train_writer.close()
test_writer.close()

使用tf.summary.image记录图片数据

  • 为了在TensorBoard中展示节点的名称,我们设计网络的时候使用with tf.name_scope限制命名空间,在这个with下的所有结点都会被自动命名为input/xxx的形式,下面例子中将一维数据变形成28*28的图片存储到一个tensor中,这样就可以使用tf.summary.image将图片数据汇总给TensorBoard展示。
log_dir = './log/'
with tf.name_scope('input'):
    x = tf.placeholder(tf.float32,[None,784], name = 'x-input')
    y = tf.placeholder(tf.float32, [None, 10], name = 'y-input')
with tf.name_scope('input_reshape'):
    image_shaped_input = tf.reshape(x,[-1, 28, 28, 1])
    tf.summary.image('input', image_shaped_input, 10)

EMBEDDINGS 窗口可以看到降维以后的嵌入向量可视化效果

这是TensorBoard中的Embedding Projector功能,只要我们使用tf.train.Saver保存了整个模型,那么就可以使用TensorBoard自动对模型中所有的二维Variable进行可视化,(TensorFlow中只有Variable可以被保存,而Tenor是不可的),因此如果我们想要可视化Tensor我们可以选择T-SNE或者PCA等算法对数据的列特征进行降维,并且在3D或者2D的坐标中展示可视化展示。如果我们的模型是Word2Vec计算或Language Model,那么TensorBoardEMBEDDINGS可视化功能会变得非常有用。

添加自己的数据到TensorBoard显示

通常情况下,我们在训练网络的时候添加summary都是通过如下方式。

  • 为什么要写summary_op = tf.summary.merge_all():为了值运行着一个op就将所有的summary写入文件。operations并不会去真的执行计算,除非你告诉他们需要去run,或者它被其他的需要run的operation所依赖。sess.run(op)或者sess.run(op->依赖之)而我们上一步创建的这些summary operations其实并不被其他节点依赖,因此,我们需要特地去运行所有的summary节点。但是呢,一份程序下来可能有超多这样的summary 节点,要手动一个一个去启动自然是及其繁琐的,因此我们可以使用tf.summary.merge_all去将所有summary节点合并成一个节点,只要运行这个节点,就能产生所有我们之前设置的summary data
tf.scalar_summary(tags, values)
# ...
summary_op = tf.summary.merge_all()
summary_writer = tf.summary.FileWriter(logdir, graph=sess.graph)
summary_str = sess.run(summary_op)
summary_writer.add_summary(summary_str, global_step)
  • 当我们自己想添加其他数据到TensorBoard的时候(例如验证时的loss等),这种方式显得太过繁琐,其实我们可以通过如下方式添加自定义数据到TensorBoard内显示。
  • 注意,这里的step只能是整数,如果是小数的话会自动转为整数类型。
summary_writer = tf.summary.FileWriter(LOGDIR)
summary = tf.Summary()
summary.value.add(tag="summary_tag", simple_value=0)
summary.value.add(tag="summary_tag2", simple_value=1)
# step代表横轴坐标
summary_writer.add_summary(summary, step)

相关文章

网友评论

      本文标题:[tf]tensorboard的使用

      本文链接:https://www.haomeiwen.com/subject/yyobhqtx.html