3.(先修课②)Convolutional Neural Net
为什么CNN可以用作图像处理?
CNN的参数比全连接神经网络少得多,为什么CNN只用较少的参数就可以用于处理图像呢?这是因为图像具有以下三点特征:
1、一些pattern比整张图片小得多,例如“鸟喙”这个特征就比整张图片小得多;
2、同样的pattern可能出现在图像的不同区域,例如“鸟喙”可能出现在图片的左上方也可能出现在图像的中间;
3、对图像的降采样(二次采样 Subsampling)不会改变图像中的物体。
CNN的卷积层的设计对应着前两点,池化层的设计对应着第三点。
CNN--卷积层
下面,为大家展示一个神奇的操作:卷积动图
卷积是一种神经网络的连接方式:
-
flatten
-
Max Pooling
CNN in Keras
解释一下
model2.add(Convolution2D(25,3,3,input_shape=(1,28,28)))
25是有25个filter,,filter的大小是3*3
input_shape中第一参数是颜色数目,黑白为1,彩色RGB为3,后两个参数是图像大小是28*28
model2.add(MaxPooling2D(2,2))
在2*2的范围内做max pooling
model2.add(Flatten())
What does CNN learn? CNN到底学到了什么?
上例中第二个卷积层有50个11x11的filter,它们的参数是学出来的,设第k个filter的活跃度为,固定参数,用梯度上升法求使
最大的
input image。
得到的结果是,使各个filter活跃度最大的image是各种条纹。这层filter看的还是局部信息。
而使flatten后的FC层的filter活跃度最大的image,就显示出了各种轮廓,说明这些filter看的是整体信息。
固定参数,求
input image,让output layer的各neuron的output最大,并没有得到期望中的数字图片,而是很杂乱的图像。(白色表示有墨水。) 例如:最简单的constrain是大部分图是没有涂笔画的。
对目标
output加一个L1正则项,所得结果稍显数字轮廓。
其实这个就是Deep Dream的思想。
Deep Dream 与 Deep Style
左边CNN filter output代表内容,后边的CNN的filter output之间的correlation代表风格。
要找一张image,其content (filter output)像左,style (output correlation)像右。
CNN的其它应用
阿尔法狗:棋盘作为image,表示成一个matrix,有开篇所讲的前两个特点(①某些pattern比整个图小②同样的pattern可能出现在图像的不同位置),但没有第三个特点(③二次采样不会影响整个图像、这个阿尔法狗不符合),所以阿尔法狗没有pooling layer。
根据阿尔法狗的特性,改善了CNN 的结构,没有使用max pooling
语音识别应用,CNN的filter只会在频谱的频率方向扫描,不会在时间方向扫描。
文本分类应用,CNN的filter只会在sentence matrix的时间方向扫描,不会在embedding dimension方向扫描。
所以,在具体场景应用CNN时,如何设计CNN的结构,需要考虑场景本身的性质特点。
To Learn More