专栏首页Small Code【TensorFlow】TensorFlow 的卷积神经网络 CNN - TensorBoard版

【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 条评论
登录 后参与评论

相关文章

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

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

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

    前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经...

    Alan Lee
  • 【TensorFlow | TensorBoard】理解 TensorBoard

    TensorBoard 是用于可视化 TensorFlow 模型的训练过程的工具(the flow of tensors),在你安装 TensorFlow 的时...

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

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

    Alan Lee
  • 张量拼接_调整维度_切片

    tf.concat的作用主要是将向量按指定维连起来,其余维度不变;而1.0版本以后,函数的用法变成:

    于小勇
  • 一个小白的 TensorFlow 学习笔记(一)

    本系列文章以《深度学习原理与TensorFlow实践》一书的内容为基础,结合网络上其他材料,提取并梳理了一些感觉比较有意义的点,也记录了一个菜鸟的心路历程。好东...

    雷博生
  • LeNet-5

    LeNet-5 模型是 Yann LeCun 教授于 1998 年在论文 Gradient-based learning applied to document...

    于小勇
  • TensorFlow从0到1 - 12 - TensorFlow构建3层NN玩转MNIST

    上一篇 11 74行Python实现手写体数字识别展示了74行Python代码完成MNIST手写体数字识别,识别率轻松达到95%。这算不上一个好成绩,不过我并...

    袁承兴
  • 【TensorFlow】TensorFlow 的卷积神经网络 CNN - 无TensorBoard版

    前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经...

    Alan Lee
  • 机器学习的大局:用神经网络和TensorFlow分类文本

    开发人员常说,如果你想开始机器学习,你应该先学习算法是如何工作的。但是我的经验表明并不是这样子。

    人工智能资讯小编

扫码关注云+社区

领取腾讯云代金券