基于Keras的卷积神经网络(CNN)可视化
基于Keras的卷积神经网络(CNN)可视化
标签(空格分隔): 深度学习
卷积神经网络可视化
-
本文整理自,书本上完整的代码在 ,并陪有详细的注释。 深度学习一直被人们称为“黑盒子”,即内部算法不可见。但是,卷积神经网络(CNN)却能够被可视化,通过可视化,人们能够了解CNN识别图像的过程。 介绍三种可视化方法 卷积核输出的可视化(Visualizing intermediate convnet outputs (intermediate activations),即可视化卷积核经过激活之后的结果。能够看到图像经过卷积之后结果,帮助理解卷积核的作用 卷积核的可视化(Visualizing convnets filters),帮助我们理解卷积核是如何感受图像的 热度图可视化(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等。 可视化结果如下图。 结论: 第一层卷积层类似边缘检测的功能,在这个阶段里,卷积核基本保留图像所有信息 随着层数的加深,卷积核输出的内容也越来越抽象,保留的信息也越来越少。 越深的层数,越多空白的内容,也就说这些内容空白卷积核没有在输入图像中找到它们想要的特征
卷积核的可视化(Visualizing convnets filters)
-
卷积核到底是如何识别物体的呢?想要解决这个问题,有一个方法就是去了解卷积核最感兴趣的图像是怎样的。我们知道,卷积的过程就是特征提取的过程,每一个卷积核代表着一种特征。如果图像中某块区域与某个卷积核的结果越大,那么该区域就越“像”该卷积核。 基于以上的推论,如果我们找到一张图像,能够使得这张图像对某个卷积核的输出最大,那么我们就说找到了该卷积核最感兴趣的图像。 具体思路:输入一张随机内容的图像 I I I, 求某个卷积核 F F F对图像的梯度 G = ∂ F / ∂ I G = partial F / partial I G=∂F/∂I,用梯度上升的方法迭代更新图像 I = I + η ∗ G I = I + eta * G I=I+η∗G, η eta η是类似于学习率的东西。 代码中,使用以及训练好的VGG16模型,可视化该模型的卷积核。结果如下 block1_conv1 block2_conv1 block3_conv1 block4_conv1 block5_conv1 结论: 低层的卷积核似乎对颜色,边缘信息感兴趣。 越高层的卷积核,感兴趣的内容越抽象(非常魔幻啊),也越复杂。 高层的卷积核感兴趣的图像越来越难通过梯度上升获得(block5_conv1有很多还是随机噪声的图像)
热度图可视化(Visualizing heatmaps of class activation in an image)
-
在图像分类问题中,假设网络将一张图片识别成“猫”的概率是0.9,我想了解到底最后一层的卷积层对这0.9的概率的贡献是多少。换句话时候,假设最后一层卷积层有512个卷积核,我想了解这512个卷积核对该图片是"猫"分别投了几票。投票越多的卷积核,就越确信图片是“猫”,因为它们提取到的特征趋向猫的特征。 代码中,输入了一张大象的图片,然后获得最后一层卷积层的热度图,最后将热度图叠加到原图像,获得图像中起到关键分类作用的部分。结果如下:
上一篇:
Java架构师技术进阶路线图
下一篇:
计算机网络:RIP协议概述