深度学习中对于卷积层的可视化可以帮助理解卷积层的工作原理与训练状态,然而卷积层可视化的方法不只一种。最简单的方法即直接输出卷积核和卷积后的filter通道,成为图片。然而也有一些方法试图通过反卷积(转置卷积)了解卷积层究竟看到了什么。

在TensorFlow中,即使是最简单的直接输出卷积层的方法,网上的讲解也参差不齐,David 9 今天要把可运行的方法告诉大家,以免大家受到误导。

废话少说,最简单的方法在此:

如果你有一个卷积层,我们以Tensorflow自带的cifar-10训练为例子:

  1. with tf.variable_scope('conv1') as scope:
  2. kernel = _variable_with_weight_decay('weights',
  3. shape=[5, 5, 3, 64],
  4. stddev=5e-2,
  5. wd=0.0)
  6. conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
  7. biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
  8. pre_activation = tf.nn.bias_add(conv, biases)
  9. conv1 = tf.nn.relu(pre_activation, name=scope.name)
  10. _activation_summary(conv1)

不出所料的话你一定会有以上代码,这是第一层卷积层conv1的TensorFlow流图定义。显然这里conv1对象是卷积层的激活输出。我们要做的就是直接可视化输出。在这个scope中加上如下代码:

  1. with tf.variable_scope('visualization'):
  2. # scale weights to [0 1], type is still float
  3. x_min = tf.reduce_min(kernel)
  4. x_max = tf.reduce_max(kernel)
  5. kernel_0_to_1 = (kernel - x_min) / (x_max - x_min)
  6. # to tf.image_summary format [batch_size, height, width, channels]
  7. kernel_transposed = tf.transpose (kernel_0_to_1, [3, 0, 1, 2])
  8. # this will display random 3 filters from the 64 in conv1
  9. tf.summary.image('conv1/filters', kernel_transposed, max_outputs=3)
  10. layer1_image1 = conv1[0:1, :, :, 0:16]
  11. layer1_image1 = tf.transpose(layer1_image1, perm=[3,1,2,0])
  12. tf.summary.image("filtered_images_layer1", layer1_image1, max_outputs=16)

即总体变为:

  1. with tf.variable_scope('conv1') as scope:
  2. kernel = _variable_with_weight_decay('weights',
  3. shape=[5, 5, 3, 64],
  4. stddev=5e-2,
  5. wd=0.0)
  6. conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
  7. biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
  8. pre_activation = tf.nn.bias_add(conv, biases)
  9. conv1 = tf.nn.relu(pre_activation, name=scope.name)
  10. _activation_summary(conv1)
  11. with tf.variable_scope('visualization'):
  12. # scale weights to [0 1], type is still float
  13. x_min = tf.reduce_min(kernel)
  14. x_max = tf.reduce_max(kernel)
  15. kernel_0_to_1 = (kernel - x_min) / (x_max - x_min)
  16. # to tf.image_summary format [batch_size, height, width, channels]
  17. kernel_transposed = tf.transpose (kernel_0_to_1, [3, 0, 1, 2])
  18. # this will display random 3 filters from the 64 in conv1
  19. tf.summary.image('conv1/filters', kernel_transposed, max_outputs=3)
  20. layer1_image1 = conv1[0:1, :, :, 0:16]
  21. layer1_image1 = tf.transpose(layer1_image1, perm=[3,1,2,0])
  22. tf.summary.image("filtered_images_layer1", layer1_image1, max_outputs=16)

加入的功能是在TensorBoard中随机显示3张卷积核,并且,显示16张卷积后的输出filter通道。

知道讲解的是,这里的tf.transpose()方法,是转置方法。

  1. tf.transpose(layer1_image1, perm=[3,1,2,0])

这句代码表示把第0维和第3维调换,因为图片输出函数

  1. tf.summary.image()

需要输入维度的格式是(batch数,长,宽,彩色通道),而刚才卷积输出得到的是(batch数,长,宽,卷积通道), 现在的彩色通道是应该是空,现在batch数应该是刚才卷积输出的彩色通道数。

总之加了以上visualization 的scope之后,就能实时跑了。亲测可用。输出样例如下:

参考文献:

  1. http://stackoverflow.com/questions/35759220/how-to-visualize-learned-filters-on-tensorflow
  2. https://github.com/tensorflow/tensorflow/issues/842
  3. https://github.com/yosinski/deep-visualization-toolbox
  4. https://github.com/tensorflow/tensorflow/issues/908
  5. https://medium.com/@awjuliani/visualizing-neural-network-layer-activation-tensorflow-tutorial-d45f8bf7bbc4
  6. https://gist.github.com/kukuruza/03731dc494603ceab0c5

source: http://nooverfit.com/wp/%E7%94%A8tensorflow%E5%8F%AF%E8%A7%86%E5%8C%96%E5%8D%B7%E7%A7%AF%E5%B1%82%E7%9A%84%E6%96%B9%E6%B3%95/#comment-900

用TensorFlow可视化卷积层的方法相关推荐

  1. 【Tensorflow】卷积层

    [Tensorflow]卷积层 1.卷积计算过程 卷积计算可以认为是一种有效提取图像特征的方法,一般用一个正方形的卷积核,按照指定步长,在输入特征图上滑动,遍历输入特征图中的每个像素点.每一个步长,卷 ...

  2. 『TensorFlow』卷积层、池化层详解

    一.前向计算和反向传播数学过程讲解 这里讲解的是平均池化层,最大池化层见本文第三小节 二.测试代码 数据和上面完全一致,自行打印验证即可. 1.前向传播 import tensorflow as tf ...

  3. TensorFlow 添加卷积层

    Tensorflow中提供了tf.nn.conv2d与tf.layers.conv2d用于添加卷积层,两者功能类似,后者为更高一级的api,和keras.layer类似.前者的激活函数需要另外代码,后 ...

  4. 基于Keras的卷积神经网络用于猫狗分类(进行了数据增强)+卷积层可视化

    接着我上一篇博客,https://blog.csdn.net/fanzonghao/article/details/81149153. 在上一篇基础上对数据集进行数据增强.函数如下: "&q ...

  5. 卷积层TSNE可视化

    很多小伙伴经常问,怎么把卷积层的输出提取出来,然后画曲线.可视化.连接到其他网络等等问题,由于本人使用的是基于keras和tensorflow框架的Spyder软件编写的代码,因此对别的软件怎么输出参 ...

  6. 请概述可视化卷积神经网络的中间输出的基本思想。_卷积神经网络为什么能称霸计算机视觉领域?...

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 导言 在 ...

  7. pytorch卷积神经网络_使用Pytorch和Matplotlib可视化卷积神经网络的特征

    在处理图像和图像数据时,CNN是最常用的架构.卷积神经网络已经被证明在深度学习和计算机视觉领域提供了许多最先进的解决方案.没有CNN,图像识别.目标检测.自动驾驶汽车就不可能实现. 但当归结到CNN如 ...

  8. 12、理解与可视化卷积神经网络

    目录 12.1 可视化卷积神经网络学习到的东西 12.1.1可视化激活和第一层权重 12.1.2 找到对神经元有最大激活的图像 12.1.3 用 t-SNE 嵌入代码 12.1.4 遮挡部分图像 12 ...

  9. pytorch卷积可视化_使用Pytorch可视化卷积神经网络

    pytorch卷积可视化 Filter and Feature map Image by the author 筛选和特征图作者提供的图像 When dealing with image's and ...

最新文章

  1. SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment?
  2. 机器学习中导数最优化方法(基础篇)
  3. 考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧
  4. FastJson稍微使用不当就会导致StackOverflow
  5. vs2017 + miniUI 后端框架使用
  6. Python基础——numpy.ndarray一维数组与多维数组
  7. 邮箱服务申请数字证书
  8. Python: 模糊综合评价法
  9. 林軒田《机器学习基石》课程总结
  10. 怎样使用Fiddler工具进行APP抓包
  11. 标准贴片电阻电容的焊接方法
  12. MFC MDI 多视图选项卡式风格
  13. Java教学视频全集,活见久
  14. Java爬虫 --- 爬取王者荣耀英雄图片
  15. Dynamo For Revit: List 连缀 和 Level
  16. app的崩溃率标准,优秀,合格,轻微隐患,严重隐患
  17. 合并两个JSONObject
  18. dns设置快速连接微软服务器,快速搭建Windows防污染DNS服务器——Pcap_DNSProxy(一)...
  19. OpenSearch最新功能介绍
  20. 【历史上的今天】4 月 6 日:小米正式成立;git 项目首次对外公开;将乔布斯赶出苹果的男人

热门文章

  1. XP与Ubuntu双系统的问题
  2. C# 中 StringBuilder和String的区别
  3. 在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
  4. 手把手实现YOLOv3(三)
  5. 时频分析:短时傅立叶变换实现(4)
  6. 【Python】生成器有啥用?
  7. 科大星云诗社动态20220113
  8. TopPaper:AI 初学者经典论文列表
  9. 吴恩达《Machine Learning》精炼笔记 7:支持向量机 SVM
  10. 机器学习笔试题精选(七)