基于Keras的卷积神经网络(CNN)可视化

基于Keras的卷积神经网络(CNN)可视化

标签(空格分隔): 深度学习


卷积神经网络可视化

  • 本文整理自Deep Learning with Python,书本上完整的代码在 这里的5.4节,并陪有详细的注释。
  • 深度学习一直被人们称为“黑盒子”,即内部算法不可见。但是,卷积神经网络(CNN)却能够被可视化,通过可视化,人们能够了解CNN识别图像的过程。
  • 介绍三种可视化方法
    1. 卷积核输出的可视化(Visualizing intermediate convnet outputs (intermediate activations),即可视化卷积核经过激活之后的结果。能够看到图像经过卷积之后结果,帮助理解卷积核的作用
    2. 卷积核的可视化(Visualizing convnets filters),帮助我们理解卷积核是如何感受图像的
    3. 热度图可视化(Visualizing heatmaps of class activation in an image),通过热度图,了解图像分类问题中图像哪些部分起到了关键作用,同时可以定位图像中物体的位置。

卷积核输出的可视化(Visualizing intermediate convnet outputs (intermediate activations)

  • 想法很简单:向CNN输入一张图像,获得某些卷积层的输出,可视化该输出
  • 代码中,使用到了cats_and_dogs_small_2.h5模型,这是在原书5.2节训练好的模型,当然你完全可以使用keras.applications 中的模型,例如VGG16等。
  • 可视化结果如下图。
    • 1.png-161kB
    • 2.png-280.7kB
    • 3.png-216.8kB
    • 4.png-48.2kB
  • 结论:
    • 第一层卷积层类似边缘检测的功能,在这个阶段里,卷积核基本保留图像所有信息
    • 随着层数的加深,卷积核输出的内容也越来越抽象,保留的信息也越来越少。
    • 越深的层数,越多空白的内容,也就说这些内容空白卷积核没有在输入图像中找到它们想要的特征

卷积核的可视化(Visualizing convnets filters)

  • 卷积核到底是如何识别物体的呢?想要解决这个问题,有一个方法就是去了解卷积核最感兴趣的图像是怎样的。我们知道,卷积的过程就是特征提取的过程,每一个卷积核代表着一种特征。如果图像中某块区域与某个卷积核的结果越大,那么该区域就越“像”该卷积核。
  • 基于以上的推论,如果我们找到一张图像,能够使得这张图像对某个卷积核的输出最大,那么我们就说找到了该卷积核最感兴趣的图像。
  • 具体思路:输入一张随机内容的图像I, 求某个卷积核F对图像的梯度 G=F/I,用梯度上升的方法迭代更新图像 I=I+ηGη是类似于学习率的东西。
  • 代码中,使用以及训练好的VGG16模型,可视化该模型的卷积核。结果如下
    • block1_conv1 11.png-860.5kB
    • block2_conv122.png-925.6kB
    • block3_conv133.png-896.8kB
    • block4_conv144.png-897.2kB
    • block5_conv155.png-930.4kB
  • 结论:
    • 低层的卷积核似乎对颜色,边缘信息感兴趣。
    • 越高层的卷积核,感兴趣的内容越抽象(非常魔幻啊),也越复杂。
    • 高层的卷积核感兴趣的图像越来越难通过梯度上升获得(block5_conv1有很多还是随机噪声的图像)

热度图可视化(Visualizing heatmaps of class activation in an image)

  • 在图像分类问题中,假设网络将一张图片识别成“猫”的概率是0.9,我想了解到底最后一层的卷积层对这0.9的概率的贡献是多少。换句话时候,假设最后一层卷积层有512个卷积核,我想了解这512个卷积核对该图片是”猫”分别投了几票。投票越多的卷积核,就越确信图片是“猫”,因为它们提取到的特征趋向猫的特征。
  • 代码中,输入了一张大象的图片,然后获得最后一层卷积层的热度图,最后将热度图叠加到原图像,获得图像中起到关键分类作用的部分。结果如下:
    • 66.jpg-226.3kB
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读