卷积神经网络CNN

图像处理:

0.输入

对于黑白的 28×28 的图片,CNN的输入是一个 28×28 的矩阵:

而对于RGB格式的28×28图片,CNN的输入则是一个 3×28×28 的三维矩阵(RGB中的每一个颜色通道都有一个 28×28 的矩阵)

1。

卷积(convolution)

取一个小的矩阵(卷积核或者过滤器,一般为奇数*奇数),分别和大的原图里面的每个小块做内积运算(下图需要改一下,不用再平均了),然后可以对该和加个偏置再经过relu激励函数(下图没进行这两步),最终得到一个 7*7 矩阵(feature map),一个卷积核对应一个feature map,一个卷积核对应1个偏置

同理可以取多个卷积核,生成多个feature map,再把这些feature map拼起来。(在卷积之前可以对原图像再填充一层像素,不然一直卷积就会导致得到的图像越来越小)(这里假定卷积步长=1,即一次移动一格,如果步长过大的话,搜集信息会不全)

加padding是为了对边缘的特征进行更多利用和分析,不至于卷一次就不分析了

卷积核内的数字也算作要训练时更新的参数,而步长,padding是超参数,定下来的

如果是原图是三维的,那卷积核也搞成三维的(下图的过滤器:3*3*3),此时数字位于方块内部,卷积的时候一个体对应1个数字(里面的内积全加起来)

生成的特征图厚度=1,注意原图和卷积核的通道数=厚度必须相同:

 

 

 当然还可以不断进行过滤(注意:最终生成了7*7*40=1960个特征值):

特征图的大小公式:

  

 

 

 卷积核的个数=特征图的厚度

2。

pooling : 池化,将一块区域用一个数字表示,又叫下采样,压缩,max pooling比average pooling好

池化层无参数,都是超参数,如步长

类似于卷积,池化也有相关的超参数,f,s:

池化是分别对每层操作,所以厚度nc不变:

 

 

3。将原图经过多个卷积层和池化层,最后铺成一维向量作为特征向量,让它通过全连接神经网络(多个全连层,即 fc 层)

举例:alexnet(仅仅增加层数),vgg(引入感受野概念),resnet:它采用如下结构,使得如果有某层训练不好,就弃用,把它的输入直接后传,这样就能使得网络层数越多效果越好:

 

文本分类:

 我的项目当中的卷积部分是这样定义的,每行是这个单词的词向量,单个影评里有300个词,就输入300*100到卷积部分:

 

posted @ 2019-01-07 17:20  Jary霸  阅读(252)  评论(0编辑  收藏  举报