TensorFlow深度学习笔记 Tensorboard入门

Github工程地址:https://github.com/ahangchen/GDLnotes 官方教程:https://www.tensorflow.org/versions/master/how_tos/graph_viz/index.html

TensorFlow自带的一个强大的可视化工具

功能

这是TensorFlow在MNIST实验数据上得到Tensorboard结果

  • Event: 展示训练过程中的统计数据(最值,均值等)变化情况
  • Image: 展示训练过程中记录的图像
  • Audio: 展示训练过程中记录的音频
  • Histogram: 展示训练过程中记录的数据的分布图

原理

  • 在运行过程中,记录结构化的数据
  • 运行一个本地服务器,监听6006端口
  • 请求时,分析记录的数据,绘制

实现

在构建graph的过程中,记录你想要追踪的Tensor

with tf.name_scope('output_act'):
    hidden = tf.nn.relu6(tf.matmul(reshape, output_weights[0]) + output_biases)
    tf.histogram_summary('output_act', hidden)

其中,

  • histogram_summary用于生成分布图,也可以用scalar_summary记录存数值
  • 使用scalar_summary的时候,tag和tensor的shape要一致
  • name_scope可以不写,但是当你需要在Graph中体现tensor之间的包含关系时,就要写了,像下面这样:
with tf.name_scope('input_cnn_filter'):
    with tf.name_scope('input_weight'):
        input_weights = tf.Variable(tf.truncated_normal(
            [patch_size, patch_size, num_channels, depth], stddev=0.1), name='input_weight')
        variable_summaries(input_weights, 'input_cnn_filter/input_weight')
    with tf.name_scope('input_biases'):
        input_biases = tf.Variable(tf.zeros([depth]), name='input_biases')
        variable_summaries(input_weights, 'input_cnn_filter/input_biases')
  • 在Graph中会体现为一个input_cnn_filter,可以点开,里面有weight和biases
  • 用summary系列函数记录后,Tensorboard会根据graph中的依赖关系在Graph标签中展示对应的图结构
  • 官网封装了一个函数,可以调用来记录很多跟某个Tensor相关的数据:
def variable_summaries(var, name):
    """Attach a lot of summaries to a Tensor."""
    with tf.name_scope('summaries'):
        mean = tf.reduce_mean(var)
        tf.scalar_summary('mean/' + name, mean)
        with tf.name_scope('stddev'):
            stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))
        tf.scalar_summary('sttdev/' + name, stddev)
        tf.scalar_summary('max/' + name, tf.reduce_max(var))
        tf.scalar_summary('min/' + name, tf.reduce_min(var))
        tf.histogram_summary(name, var)
  • 只有这样记录国max和min的Tensor才会出现在Event里面
  • Graph的最后要写一句这个,给session回调
merged = tf.merge_all_summaries()

Session 中调用

  • 构造两个writer,分别在train和valid的时候写数据:
train_writer = tf.train.SummaryWriter(summary_dir + '/train',
                                              session.graph)
valid_writer = tf.train.SummaryWriter(summary_dir + '/valid')
  • 这里的summary_dir存放了运行过程中记录的数据,等下启动服务器要用到
  • 构造run_option和run_meta,在每个step运行session时进行设置:
summary, _, l, predictions = 
    session.run([merged, optimizer, loss, train_prediction], options=run_options, feed_dict=feed_dict)
  • 注意要把merged拿回来,并且设置options
  • 在每次训练时,记一次:
train_writer.add_summary(summary, step)
  • 在每次验证时,记一次:
valid_writer.add_summary(summary, step)
  • 达到一定训练次数后,记一次meta做一下标记
train_writer.add_run_metadata(run_metadata, 'step%03d' % step)

查看可视化结果

  • 启动TensorBoard服务器:
python安装路径/python TensorFlow安装路径/tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory

注意这个python必须是安装了TensorFlow的python,tensorboard.py必须制定路径才能被python找到,logdir必须是前面创建两个writer时使用的路径

比如我的是:

/home/cwh/anaconda2/envs/tensorflow/bin/python /home/cwh/anaconda2/envs/tensorflow/lib/python2.7/site-packages/tensorflow/tensorboard/tensorboard.py --logdir=~/coding/python/GDLnotes/src/convnet/summary

使用python

强迫症踩坑后记

  • 之前我的cnn代码里有valid_prediction,所以画出来的graph有两条分支,不太清晰,所以只留了train一个分支

修改前:

修改后:

  • 多用with,进行包裹,这样才好看,正如官网说的,你的summary代码决定了你的图结构
  • 不是所有的tensor都有必要记录,但是Variable和placeholder最好都用summary记录一下,也是为了好看
  • 由于有了gradient的计算,所以与gradient计算相关的都会被拎出来,下次试一下用其他optimizer

我的CNN TensorBoard代码:cnn_board.py

参考资料

觉得我的文章对您有帮助的话,不妨点个star

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏磐创AI技术团队的专栏

Tensorflow多GPU使用详解

1.5K4
来自专栏人工智能LeadAI

在TensorFlow中使用pipeline加载数据

前面对TensorFlow的多线程做了测试,接下来就利用多线程和Queue pipeline地加载数据。数据流如下图所示: ? 首先,A、B、C三个文件通过Ra...

4183
来自专栏PaddlePaddle

【进阶篇】在不同的集群框架下完成分布式训练

编写|PaddlePaddle 排版|wangp 本文将介绍如何使用PaddlePaddle在不同的集群框架下完成分布式训练。分布式训练架构如下图所示: ? A...

3585
来自专栏人人都是极客

2.运行一个demo

在 Object Detection API 的示例代码中包含了一个训练识别宠物的 Demo,包括数据集和相应的一些代码。虽然本课程中我们会自己准备数据和脚本来...

3846
来自专栏AI研习社

将 TensorFlow 训练好的模型迁移到 Android APP上(TensorFlowLite)

最近在做一个数字手势识别的APP(关于这个项目,我会再写一篇博客仔细介绍,博客地址:一步步做一个数字手势识别APP,源代码已经开源在github上,地址:Chi...

2313
来自专栏一个会写诗的程序员的博客

安装 TensorFlow安装 TensorFlow

我们已在如下配置的 64 位笔记本电脑/台式机操作系统中构建并测试过 TensorFlow:

752
来自专栏lgp20151222

bootstrap的模态框

941
来自专栏性能与架构

分方式缓存常用的一致性hash是什么原理

一致性hash是用来解决什么问题的? 先看一个场景 有n个cache服务器,一个对象object映射到哪个cache上呢? 可以采用通用方法计算objec...

3619
来自专栏AI科技大本营的专栏

十图详解TensorFlow数据读取机制(附代码)

作者 | 何之源 在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料。今天...

36111
来自专栏用户2442861的专栏

Caffe学习系列(12):训练和测试自己的图片

学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中。因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个...

961

扫码关注云+社区