Tensorboard入门 | TensorFlow深度学习笔记

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

01 功 能

这是TensorFlow在MNIST实验数据上得到Tensorboard结果(https://www.tensorflow.org/tensorboard/index.html#graphs)

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

02

原 理

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

03

实 现

在构建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()

04

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)

05

查看可视化结果

  • 启动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

  • 然后在浏览器输入 http://127.0.0.1:6006 就可以访问到tensorboard的结果

06

强迫症踩坑后记

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

修改前:

多分支graph

修改后:

单分支graph

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

我的CNN TensorBoard代码:cnn_board.py(https://github.com/ahangchen/GDLnotes/blob/master/src/convnet/cnn_board.py)

07

参考资料

  • mnist_with_summaries.py (https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py)

Github地址:https://github.com/ahangchen/GDLnotes

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-18

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏简书专栏

基于tensorboard的模型训练过程可视化

2018年9月14日笔记 阅读本文的前提是已经阅读《基于tensorflow的一元二次方程回归预测》,文章链接:https://www.jianshu.com...

1333
来自专栏racaljk

2017第八届蓝桥杯决赛(C++ B组)4.发现环

小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最...

1464
来自专栏漫漫深度学习路

pytorch学习笔记(十):learning rate decay(学习率衰减)

pytorch learning rate decay 本文主要是介绍在pytorch中如何使用learning rate decay. 先上代码: def...

65210
来自专栏木子昭的博客

创意终端影集左侧效果图:

左侧效果图: ? ? ? ? ? 实现思路: 通过python的PIL库,将彩色转黑白(256种灰度),创建字符集,建立字符集与灰度的映射 ? 动图 把照片裁成...

3527
来自专栏AI2ML人工智能to机器学习

TF Boy 之初筵 - 分布十三式

我们在 " 机器学习平台的优化器 (平台篇、优化篇)" 里面提到TensorFlow (TF) 速度的成为深度学习的武林第一大帮。 博士好友清华,在这方面也颇有...

642
来自专栏wym

opencv下imread函数返回值

openCV的imread()函数和imwrite()函数能支持各种静态图像文件格式。

2662
来自专栏Phoenix的Android之旅

Keras神经网络转到Android可用的模型

一个完整的神经网络由这两部分构成,Tensorflow 在保存时除了这两个文件还会在目录下自动生成 checkpoint, checkpoint的内容如下,它只...

1532
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 17 - Step By Step上手TensorBoard

上一篇16 L2正则化对抗“过拟合”提到,为了检测训练过程中发生的过拟合,需要记录每次迭代(甚至每次step)模型在训练集和验证集上的识别精度。其实,为了能更...

3588
来自专栏SIGAI学习与实践平台

编写基于TensorFlow的应用之构建数据pipeline

本文主要以MNIST数据集为例介绍TFRecords文件如何制作以及加载使用。所讲内容可以在SIGAI 在线编程功能中的sharedata/intro_to_t...

992
来自专栏深度学习那些事儿

pytorch中读取模型权重数据、保存数据方法总结

pytorch中保存数据策略在长时间的深度训练中有很大的作用,我们可以通过保存训练好的权重,然后等到下次使用的时候再取出来。另外我们也可以通过迁移学习使用别人训...

3.8K8

扫码关注云+社区