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

前面 写了一篇用 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,先到这里吧。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漫漫深度学习路

MXNET学习笔记(一):Module类(1)

Module 是 mxnet 提供给用户的一个高级封装的类。有了它,我们可以很容易的来训练模型。 Module 包含以下单元的一个 wraper symbol ...

2775
来自专栏计算机视觉与深度学习基础

【深度学习】使用tensorflow实现AlexNet

AlexNet是2012年ImageNet比赛的冠军,虽然过去了很长时间,但是作为深度学习中的经典模型,AlexNet不但有助于我们理解其中所使用的很多技巧,...

42310
来自专栏CreateAMind

openAi HER 算法运行流程学习

1133
来自专栏WD学习记录

21个项目玩转深度学习 学习笔记(2)

事实上,必须先读入数据后才能进行计算,假设读入用时0.1s,计算用时0.9秒,那么没过1s,GPU都会有0.1s无事可做,大大降低了运算的效率。

3151
来自专栏人人都是极客

5.训练模型之利用训练的模型识别物体

接下来我们开始训练,这里要做三件事: 将训练数据上传到训练服务器,开始训练。 将训练过程可视化。 导出训练结果导出为可用作推导的模型文件。 配置 Pipelin...

3934
来自专栏Jack-Cui

Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习

运行平台:Ubuntu14.04     安装完Caffe后,如何开始学习Caffe呢?一个不错的方法就是从Caffe自带的examples开始学起。在caff...

2997
来自专栏素质云笔记

SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)

承接上一篇SSD介绍:SSD+caffe︱Single Shot MultiBox Detector 目标检测(一) 如果自己要训练SSD模型呢,关键...

1K10
来自专栏Jack-Cui

Caffe学习笔记(五):使用pycaffe生成solver.prototxt文件并进行训练

Python版本: Python2.7 运行平台: Ubuntu14.04     上几篇笔记记录了如何将图片数据转换成db(leveldb/lmdb)文件,...

3720
来自专栏AI研习社

OpenAI 开源最新工具包,模型增大 10 倍只需额外增加 20% 计算时间

AI 研习社消息,近日,OpenAI 在 GitHub 上开源最新工具包 gradient-checkpointing,该工具包通过设置梯度检查点(gradie...

3337
来自专栏PaddlePaddle

【进阶篇】命令行参数使用案例

编写|PaddlePaddle 排版|wangp 1 本地训练 本地训练的实验,诸如图像分类,自然语言处理等,通常都会使用下面这些命令行参数 paddle ...

3134

扫码关注云+社区

领取腾讯云代金券