卷积神经网络(CNN)
图片分类:输入一个固定尺寸的图片,在通过一个Model之后,会得到一个输出,这个输出是一个vector。最右边的ŷ就是识别这个图片中有什么,向量中的Dimension越多就表示它可以识别出的东西种类越多。比如这张图片,y’与ŷ所表达出来的含义就是这张图片是猫的概率为70%
接下来问题是:怎么让输入可以是一张图片?
可以把一张图片当作是三维的tensor,分别是长,宽还有图片的rgb。之前输入的时候都是以向量形式输入的,所以就把这三维拉成最右面这样的向量形式,分别是三组100*100的接在一起。右面这个向量中的每一个数值就代表图片对应每一个位置的每一个颜色的强度。
weight有3×10的七次方,参数量巨大。参数越多越要增加模型的弹性。
版本一
观察1:
neuron不需要看完整的图片,抓最重要的特征,比如有的neuron识别到鸟的眼睛,有的识别到鸟的爪子…
简化1:
每个neuron神经元只关注一部分区域并接受该区域的信息,神经元只需要接受该红色立方体部分区域的信息,多个神经元可以观测同样的区域,观测区域可以根据需求规定不同的大小,不同的神经元可以观测重叠的区域。
最典型的设置:
- 每一个观测区域有一组神经元节点,如64,128个
- 观测区域是全通道
- kernel size(指的是卷积核的维度。卷积核(或称为滤波器)是用于卷积操作的一个小矩阵,它在输入数据(如图像)的各个区域上滑动,以提取特征。)为3*3
- stride(是卷积操作中卷积核在输入数据上滑动的步长或距离)为2
- 当滑动到边界时,用padding补值,可以用0来补
直到观测区域覆盖整张图片
观察2
相同的模式出现在不同的区域,同样都是鸟嘴的特征,分别出现在图片左上角和中间位置。那就需要在不同位置都放置监测鸟嘴的神经元,可是检测鸟嘴这件事是重复的,所以可以进行简化。
简化2
让不同区域用来侦测鸟嘴特征的神经元共享参数,用一套weights,bias,用来达到减少参数量的目的
最典型的设置
每个区域有一套神经元,每个观测区域中的神经元都具有相同参数。共享参数,也就全部区域都只有一组参数了。
观测区域参数共享就是convolutional layer
版本二
有很多Filter,每一个Filter对应可以检测图片中某一个特征,大小设置为33channel(如果是彩色的通道为3,黑白为1)
对于每一个Filter,会扫描整张图片的所有区域,然后将对应元素相乘再求和,扫描之后所得到的矩阵就是该层Filter对图像的处理结果。
图片中移动步长为1。如把红色方框中33矩阵中的每一个数字分别对应Filter1中的数字,相乘再求和,[01+1*(-1)+0*(-1)+0*(-1)+11+0(-1)+0*(-1)+1*(-1)+0*1]就会得到最右下角的黄色圆圈中的值-1。
有多个Filter,依次计算得到的矩阵们就是Feature Map
假设有64个Filter,那么数值矩阵大小为4×4×64,再将这个数值矩阵看成一个全新的图片,输入到下一层的卷积之中,那么下一层的Filter就为3×3×64
总结
两个版本,版本一中说的共享参数,就是版本二中的Filter。Filter要扫过整张图片
观察三:
将图片缩小,特征不会变。这样缩小图片就叫pooling
做法:
将通过Filter得到的矩阵按照固定大小进行分组,然后每一组选出最大的数值来作为代表。
把矩阵按2×2分组,经过pooling后,原来4×4的图片就会缩小为2×2的图片
完整的CNN
- 将图像输入后经过反复的卷积和pooling后得到一个数值矩阵
- 将该数值矩阵Flatten,降成一个向量,作为一个全连接网络的输入
- 经过全连接网络的处理后的输出再经过一个softmax函数,得到最终的输出向量
原文地址:https://blog.csdn.net/weixin_52201996/article/details/140577449
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!