神经网络CNN(学习总结)

前言

       简单的讲,CNN的功能即为一个处理黑箱。输入一张图片的像素信息,经过CNN处理之后,输出该图片中的物体是什么。即使图片经过平移、缩放、旋转、加厚等操作,仍然能有效识别出来。

CNN每层都识别了什么?

       比如说我们给CNN喂了一张脸的图片,CNN的第一层第二层识别了类似鼻子和嘴之类的边缘信息,在更高层能识别出整个面部了。汽车的例子也类似,底的层识别出轮胎窗户什么的,高的层识别出整个汽车。(这个只要你懂卷积核是什么,卷积的过程结果,池化的结果,就不难理解)

       怎么提取物体的特征呢?即通过不同的卷积操作,将对应的特征提取出来。如图,第一个卷积核能提取出红色框内的特征,第二个卷积核能提取出橙色框内的特征,第三个卷积核能提取出绿色框内的特征。(根据梯度)

补充个概念:

        局部连接:feature map上每个值仅对应着原图的一小块区域,原图上的这块局部区域称作感受野(receptive field)。局部连接的思想,受启发于生物学里面的视觉系统,视觉皮层的神经元就是局部接受信息的。

(1)卷积层

       

        绿色为原图像素信息,红色数字矩阵为卷积核,黄色为卷积核在原图上进行逐行扫描的矩阵区域。将卷积核矩阵和扫描区域的矩阵的每个元素对应数值,相乘再相加再取均值,即得右边粉色的新特征矩阵 。

        总体的意思就是用一个filter去和每个image patch相运算,如果这个filter的特征与image patch的特征相似,则计算出的数值高(接近1)。主要分为正常卷积(1,2,3d)和转置卷积,卷积的作用是提取特征。

 

  

  如果你用三个卷积核filter,那么原本的一张图片,在进行完卷积运算后,将会变成三张图片。

               

       也就是说,图片的depth变高了。

       这里需要理解的是:filter是什么?filter矩阵中的数是什么?filter中的数是怎么生成的,怎么变化的?

1)filter就是卷积核,本质其实就是矩阵,就是下图中中间3*3的矩阵。

2)filter中的数是weights。(个人理解,存疑)

3)你只需要规定filter的尺寸(kernel_size),里面的weights随机生成。

       在训练过程中,weights随之改变。训练到最后得到的filter,就是“无限趋像”图像中每个小patch。比如说一张脸,在训练完后,filter会是鼻子/眼镜/耳朵等。因为训练的目的就是使loss降低。

(2)归一化

     用激活函数(修正线性单元ReLus)将负数修正为0,对卷积后的图像进行归一化处理。

输入数据归一化的作用:

  1. 排除量纲影响
  2. 避免异常值引起的网络无法收敛或数值问题
  3. 激活函数用sigmoid时,避免神经元饱和
  4. 零中心可以提高训练效率,少走“之”字(输入全为正时,与第一层相连的权重只能全为正或负)
  5. 防止梯度爆炸或消失。因为梯度公式里面有一项就是上一层输入,将输入控制在一个合理的区间可以防止梯度爆炸或消失。

特征归一化:feature map归一化

  1. 加速收敛。
  2. 对参数初始化和学习率设置更鲁棒。

 

假设输入feature map形状为[N,C,H,W]

Batch Normalization [N,H,W]:在batch的维度上归一化,每个channel分别进行。

Layer Normalization [C,H,W]:归一化每个batch上的所有特征。

Instance Normalization [H,W]:归一化每个batch中的单个特征。

Group Normalization [C//G,H,W]:取LN和IN的折中,将C分为G组,每组分别norm。

列举一些激活函数:

sigmoid:特性:输出在(0,1),符合概率,导数范围在【0,0.25】会出现梯度消失(链式求导),输出为非0均值,破坏数据分布。

tanh:输出值在(-1,1),数据符合0均值,导数范围在【0,1】,在网络层数多的情况下,易出现梯度消失。

relu:输出值均为正数,负半轴导致死神经元,导数是1,缓解梯度消失,易出现梯度爆炸。

 

(3)池化层

作用:把卷积操作得到的feature map进行缩小,提高计算效率。

类别:最大池化、平均池化

一般取最大池化,在保留原图信息的同时还能降低计算量:

       如图,将原图像分为4个大区域,进行卷积计算后,每块区域下采样为一个像素值(取每个区域结果的最大值),即缩小了图片的信息量。

 ​​​​​​​  

      对归一化的图像进行最大池化的结果如下,对于边缘位置,进行补零(zero padding) 

 

(4)全连接层

        输出的每个神经元都和上一层每一个神经元连接。选用多个不同的卷积核进行卷积运算,得到不同的结果,如图(此处以3个为例) 。

 

根据每个数值的权重占比,计算出结果是什么的概率。什么有最大的可能性,那么计算结果就是什么

(5)反向传播算法

将结果与真实结果进行误差计算,通过反向反馈,不断地修改卷积核的参数,将损失函数(梯度下降)降到最低,即得到最优的结果。

 

如图,原图是X的概率为0.92,是O的概率为0.51,总误差为0.57。

参考:

理解CNN(CNN过程可视化)_whale998的博客-CSDN博客

(2条消息) [CNN]Youtube上迄今为止最好的卷积神经网络入门教程——笔记_Kenn7的博客-CSDN博客

CNN:卷积神经网络的原理,卷积、归一化、池化等_航空界的小爬虫-CSDN博客_cnn 归一化

参考视频链接(号称最好的卷积神经网络讲解视频)

【CNN】Youtube上迄今为止最好的卷积神经网络入门教程_哔哩哔哩_bilibili

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珞珈山民、Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值