【TensorFlow】TensorFlow 的卷积神经网络 CNN - TensorBoard 版

原创 2017年03月17日 10:57:39

前面 写了一篇用 TensorFlow 实现 CNN 的文章,没有实现 TensorBoard,这篇来加上 TensorBoard 的实现,代码可以从 这里 下载。


什么是 TensorBoard

To make it easier to understand, debug, and optimize TensorFlow programs, we’ve included a suite of visualization tools called TensorBoard. You can use TensorBoard to visualize your TensorFlow graph, plot quantitative metrics about the execution of your graph, and show additional data like images that pass through it.

上面是引用了官网的介绍,意思就是说 TensorBoard 就是一个方便你理解、调试、优化 TensorFlow 程序的可视化工具,你可以可视化你的 TensorFlow graph、学习参数以及其他数据比如图像。

启动你的 TensorBoard 并在浏览器中打开后应该是类似下面这样的:

这里写图片描述


CNN 结构

CNN 的结构和 上篇 一样,数据集仍为 CIFAR10 数据集。

下面我用 TensorBoard 绘制的结构图说一下:

这里写图片描述

为了简洁我隐掉了一些不必要的节点。从图中可以看出有两个卷积层两个池化层两个 norm 层以及三个全连接层,图中指向 train 节点的线条的粗细表示需要训练的参数的多少,各层之间的线条上的数字表示了传递给下一层的参数的维度,例如 conv1 传递给 pool1 的参数维度是 ?×32×32×64由于这个图不能放大导致重叠,在浏览器中是可以放大的),? 表示 batch 的大小。具体的各层参数如下:

  • conv1:kernel 大小是 [5, 5, 3, 64],步长为 1,padding 为 SAME
  • pool1:kernel 大小是 [1, 3, 3, 1],步长为 2,padding 为 SAME
  • conv1:kernel 大小是 [5, 5, 64, 64],步长为 1,padding 为 SAME
  • pool1:kernel 大小是 [1, 3, 3, 1],步长为 2,padding 为 SAME
  • fc1:神经元个数为 384
  • fc2:神经元个数为 192

代码

完整代码可以在 这里 下载,下面我就说下关于 TensorBoard 的部分。

上面那个图中的每个节点都是用 tf.namescope() 指定的,例如

with tf.name_scope('conv1'):
        conv1 = tf.nn.conv2d(x4d, weight_variable('conv1', [5, 5, 3, 64], 5e-2, 'w_conv1'), strides=[1, 1, 1, 1], padding='SAME')
        conv1 = tf.nn.bias_add(conv1, bias_variable('conv1', 0.0, tf.float32, [64], 'b_conv1'))
        conv1 = tf.nn.relu(conv1)

这就指定了 conv1 的节点。相同节点名字会在一起。

你可以使用 tf.summary.scalar 记录准确率、损失等数据,使用 tf.summary.histogram 记录参数的分布情况。

with tf.name_scope('accuracy'):
        with tf.name_scope('correct_prediction'):
            correct_pred = tf.equal(tf.argmax(fc3, 1), tf.argmax(y, 1))
        with tf.name_scope('accuracy'):
            accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
    tf.summary.scalar('accuracy', accuracy)

然后用 tf.summary.merge_all 将这些操作集中起来。

merged_summary_op = tf.summary.merge_all()

最后运行的时候使用 tf.summary.FileWriter 将这些操作得到的数据写进日志文件,以供 TensorBoard 可视化。

summary_writer = tf.summary.FileWriter('./tensorboard/log/', graph=tf.get_default_graph())

还可以可以使用tf.train.Saver 保存模型,TensorBoard 可以显示每一步的运行时间以及内存使用情况。(下面仅是代码片段

saver = tf.train.Saver()
# 这里有其他代码
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
# 这里有其他代码
summary_writer.add_run_metadata(run_metadata, 'step%d' % (i * total_batch + batch))
saver.save(sess, './tensorboard/log/model.ckpt', i * total_batch + batch)

总之有好多功能,我在这里就不一一阐述了,可以去官网看文档。


效果

进入到 tensorboard 所在目录后,执行下面的语句即可启动 TensorBoard :

没有使用 tf.train.Saver() 的:

tensorboard --logdir=tensorboard/log/without-saver

使用 tf.train.Saver() 的:

tensorboard --logdir=tensorboard/log/with-saver

按照提示,在浏览器中打开地址就可以看到可视化结果了。

这里写图片描述
例如我这里是 http://192.168.16.1:6006/

训练准确率曲线:

这里写图片描述

损失曲线:

这里写图片描述

Graph:

这里写图片描述

Step 100 的各节点计算时间(需要使用 tf.train.Saver()):

这里写图片描述

Step 100 的各节点内存消耗(需要使用 tf.train.Saver()):

这里写图片描述

fc1 层参数的降维可视化,可以旋转缩放,这个在这里不太有用,仅作展示用,三个主成分解释的总方差才 21%。在做 NLP 的时候这个功能就非常有用了,可以方便的展示词的位置。

这里写图片描述


END

OK,先到这里吧。

版权声明:本文为博主原创文章,未经授权禁止转载。

TensorBoard--TensorFlow可视化

TensorBoard是TensorFlow极为有用的工具,可以用来记录和跟踪学习过程中网络结构节点的变化(Event、Images),展示整个网络结构,对于程序的结构检验、调试和优化有很大的帮助。本...
  • wangjian1204
  • wangjian1204
  • 2016年11月22日 20:40
  • 4470

【TensorFlow】TensorFlow 的卷积神经网络 CNN - 无 TensorBoard 版

前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经网络来处理相同的数据集 - CIFAR1...
  • u010099080
  • u010099080
  • 2016年12月28日 12:13
  • 3093

Deep Learning-TensorFlow (2) CNN卷积神经网络_TensorBoard可视化使用及MNIST代码实例

为了更方便 TensorFlow 程序的理解、调试与优化,谷歌发布了一套叫做 TensorBoard 的可视化工具。你可以用 TensorBoard 来展现你的 TensorFlow 图像,绘制图像生...
  • u013751160
  • u013751160
  • 2017年03月20日 10:43
  • 2037

基于CIFAR10数据集的CNN在TensorFlow实现-TensorBoard版

  • 2017年03月15日 11:15
  • 49.29MB
  • 下载

Tensorflow Ubuntu16.04上安装及CPU运行Tensorboard、CNN、RNN图文教程

Tensorflow Ubuntu16.04上安装及CPU运行tensorboard、CNN、RNN图文教程
  • wizen641372472
  • wizen641372472
  • 2017年05月24日 13:39
  • 7298

win10 Tensorflow Tensorboard 空白解决

Tensorboard记录11.19 Tensorflow入门,踩一些坑还是难免的,就在这里记录下,同时能够给遇到同样问题的人一个参考。 Tensorboard 打开一片空白 环境是Tens...
  • playlinuxxx
  • playlinuxxx
  • 2017年11月16日 20:13
  • 158

TensorBoard可视化学习

参考window下启动tensorboard import tensorflow as tf with tf.name_scope('input1'): input1 = tf.co...
  • m0_37733057
  • m0_37733057
  • 2017年06月02日 17:45
  • 1989

简单卷积神经网络的tensorboard可视化

tensorboard是tensorflow官方提供的可视化工具。可以将模型训练中的数据汇总、显示出来。本文是基于tensorflow1.2版本的。这个版本的tensorboard的界面如图: ima...
  • happyhorizion
  • happyhorizion
  • 2017年09月08日 14:09
  • 996

tensorflow笔记:多层CNN代码分析

在之前的tensorflow笔记:流程,概念和简单代码注释 文章中,已经大概解释了tensorflow的大概运行流程,并且提供了一个mnist数据集分类器的简单实现。当然,因为结构简单,最后的准确率在...
  • u014595019
  • u014595019
  • 2016年10月03日 18:05
  • 27751

卷积神经网络CNN原理以及TensorFlow实现

在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下。首先介绍原理部分。        通过一个图像分类问题介绍卷积神经网络是如何工作的。下面是卷积神经网络判断一个图片是否包...
  • xukaiwen_2016
  • xukaiwen_2016
  • 2017年04月27日 23:10
  • 13876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【TensorFlow】TensorFlow 的卷积神经网络 CNN - TensorBoard 版
举报原因:
原因补充:

(最多只允许输入30个字)