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