美文网首页
[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