本文试图对CNN到底做了什么,给出一些分析解释。通过观察卷积层的输出构成的灰度图,试图寻找这个卷积在物理上有什么作用。
训练数据是一些验证码图片,用了四个卷积层和两个全连接层的模型,在训练集上训练到98%的准确率,验证集80%。具体代码可参考我前面的这篇博文《CNN识别图形验证码》。图片似乎只有翻墙才能看到,不好意思。
可视化结果分别从以下几个角度做分析:
1 看每个卷积层经过激活函数(relu)后的输出图像
第一个卷积层的结果(相对比较容易懂):
为了方便人眼观察,对每一幅图的像素值都做了一个放大,
做法是除以这幅图的最大像素值然后乘以255。
灰度图中越亮的部分,就说明原来的值越大。注意,
这样的做法导致,不同的图中比较像素点的相对亮度是没有意义的。
原图:
可以观察,不同的filter可以提取到不同的特征:
比如这个filter可以把所有要识别的目标提取出来,
过滤掉背景颜色和噪音。
这两个filter把所有非背景部分提出来,
但一个关注上半部分,一个关注下半部分。
这个filter对这幅图片“不感冒”。
这个filter只提取噪音。
这两个filter,一个分别只提取右斜的笔画,
一个只提取左斜的笔画。