CNN
前提知识
以图片分类为例
从第一个hidden layer到后面的layer,分类结果从简单到复杂。
- Some patterns are much smaller than the whole image.
每个neural只需要连接到小块区域,就可以判断图中信息的类别
不同neural检测不同的patterns,合起来就可以知道整体信息的类别 - Same patterns appear in different regions.
相同模式出现在不同的区域,但是可以用同一个neural同组参数去侦查出来 - Subsampling the pixels will not change the object
subsampling 对图像不会有影响,但可以减小我们在neural中使用的参数
CNN架构
Ps:重复的次数需要提前定好
Convolution作用:找出重要的小区域,并且在不同区域找到
Max pooling作用:做subsampling
Convolution
有一组filter matrixs(好多filters),这里面的元素是必须被学出来的网络参数
filter的大小nn,就说明他在侦查一个nn的区域pattern
一个filter可以侦查在不同区域相同的pattern
每个filter都会去侦查,并得到相同大小的不同的值,这些就组成了Featuer Map.有多少个filter,就有多少维新的image。
如果一个待处理的照片是黑白的,那每个filter就是一个矩阵
如果照片是RGB彩色的,那每个filter就是一组立方体
convolution 就是减少weight还公用weight
Max Pooling
在convolution以后得到新的元素矩阵,再将这组矩阵划分为小部分,在小部分中依据一些原则保留部分元素,不要其他元素,这样就可以达到缩小图片的目的。这个原则可以多种多样。
通过多次重复Convolution+Max Pooling就可以得到比较小的image,通道数是filters数目。
Flatten
把新的image中元素拉直
Fully Connected Feedforward network
CNN in Keras
1.Convolution
25,3,3是25个33的filters
input_shape(1,28,28)是黑白的2828的图片
2.maxpooling
选择2*2为一个小部分,留下每个小部分中最大的数据
what does CNN learn?
我们通过分析第k个filter的输出来得到这个filter做了什么
定义一个值 degree of the activation of the k-th filter–是用来描述第k个filter被启动的程度
a
k
=
∑
i
=
1
11
∑
j
=
1
11
a
i
j
k
a^k=\sum_{i=1}^{11} {\sum_{j=1}^{11} {a_{ij}^k}}
ak=∑i=111∑j=111aijk
要使这个被启动的程度最大,就可以设置一个输入变量,计算
a
k
a^k
ak最大时对应的x。使用梯度下降法。
用这个方法,可以找到每个filter的
a
k
a^k
ak最大对应的那个输入图像
然后在C+M以后,可以看出这个filter的效果
Fully connected network 中的每个neural的功能是什么?
和上一个的思路很像
定义第j个neuron上的output,找一张图片,使得经过neural network以后输出
a
j
a^j
aj最大。
对Fully Connected network后的输出找最大时对应的图片
发现,找到的各类别图片并不是真正对应的。
所以对这个方法的程式进行改进
x
∗
=
a
r
g
m
a
x
(
y
i
−
∑
i
,
j
∣
x
i
j
∣
)
x^*=arg max(y^i-\sum_{i,j} {|x_{ij}|})
x∗=argmax(yi−∑i,j∣xij∣)