卷积神经网络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到卷积部分: