• 网络中的网络NiN详解


    全连接层

    **全连接层存在的问题:**占用参数空间,带来过拟合问题
    因为参数比较多,所以很容易过拟合,收敛特别快,所以一般要在全连接层做大量的正则化,不要在这一层就把所有的数据都学到了
    卷积层后的第一个全连接层的参数个数计算:
    C × H × W × M C\times H\times W\times M C×H×W×M
    C : o u t p u t   c h a n n e l H : h e i g h t   o f   f e a t u r e   m a p W : w i d t h   o f   f e a t u r e   m a p M : 全 连 接 层 的 输 出 的 神 经 元 的 个 数 C:output\,channel \\H:height\, of\, feature \,map\\W:width\, of\, feature \,map\\M:全连接层的输出的神经元的个数 C:outputchannelH:heightoffeaturemapW:widthoffeaturemapM:

    在这里插入图片描述
    eg: LeNet的卷积层后的第一个全连接层的参数个数计算:
    1655*120=48k

    在这里插入图片描述

    AlexNet:
    256554096=26M
    在这里插入图片描述
    VGG:
    512
    774096=102M

    卷积层需要较少的参数:

    C i n × C o u t × k 2 C_{in}\times C_{out}\times k^{2} Cin×Cout×k2
    C i n : i n t p u t   c h a n n e l s C o u t : o u t p u t   c h a n n e l s k : k e r n e l   s i z e C_{in}: intput\,channels\\C_{out}:output\,channels\\k:kernel\,size Cin:intputchannelsCout:outputchannelsk:kernelsize
    在这里插入图片描述
    input channel决定了卷积核的channel个数,output channel决定了卷积核的个数
    而单个channel的卷积核的h=w=k,
    所以卷积层需要的参数 = C i n × C o u t × k 2 C_{in}\times C_{out}\times k^{2} Cin×Cout×k2

    NiN

    就是完全不用全连接层

    在这里插入图片描述
    在这里插入图片描述
    一个卷积层后跟两个全连接层:

    • 步幅为1,no padding, 输出形状跟卷积层输出一样
    • 起到全连接层的作用

    NiN架构:

    • 无全连接层
    • 交替使用NiN块和步幅为2的最大池化层
      逐步减小高宽和增大通道数
    • 最后使用全局平均池化层得到输出(全局平均池化层的大小等于feature map的大小)
      其输入通道数是类别数

    Global Average Pooling

    Global Average Pooling主要是为了解决全连接层参数过多的问题,早起对于分类问题,最后一个卷积层的feature map通常和全连接层链接,最后通过softmax进行分类。全连接层带来的问题就是参数空间过大,容易过拟合(因为它的参数量很大啊,联想一下拟合离散点的函数,多项式的次数越高则经过的点越多越准,但是容易过拟合)。早期的AlexNex采用了Dropout来减轻过拟合,提高网络的泛化能力,但依旧无法解决参数过多的问题。

    而global average pooling的做法是将全连接层去掉,在最后一层,将卷积层(即卷积核的个数,而不是卷积核的channel数!!!)设为与类别数目一致,然后全局pooling, 从而直接输出属于各个类的结果,再接上softmax来转化为属于各个类的概率。

    使用全局平均pooling代替全连接层,使得最后一个多层感知卷积层获得的每一个特征图能够对应于一个输出类别,优点如下:

    • 全局平均池化更原生地支持于卷积结构,通过加强特征映射与相应分(种)类的对应关系,特征映射可以很容易地解释为分类映射。
    • 全局平均池化一层没有需要优化的参数,减少大量的训练参数有效避免过拟合
    • 全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的

    NIN网络是inception的前身,总结来说就是在卷积层后面增加1 ∗ 1 1*11∗1卷积核,然后将全连接层换成平均全局池化层(Global Average Pooling),可以减少大量的训练参数有效避免过拟合
    参考博客

    在这里插入图片描述

    如上图所示,黑色虚线框内为11的卷积来代替全连接层;红色虚线框内为全连接层的过程
    而左边只需要:3 × \times × 2个参数
    右边需要:27 × \times × 2个参数
    上图:其实左边的1
    1的卷积来代替全连接层,就是将27个球球(每一个球球就是左边图的一个小方块)的某些球球的权重(权重复用)搞成一样的,然后求27个球球加权求和取平均 == 1*1的卷积后进行GlobalAvgPool
    最后再通过softmax转为概率,上面图中为2分类
    上图中只是举了一个全连接层的概念,当然也可以弄两个全连接层

    2次1*1的卷积就相当于两个全连接层
    在这里插入图片描述

    1*1卷积的作用

    • 改变通道数
    • 代替全连接层,减少参数数量,避免过拟合
  • 相关阅读:
    Electron(v26.2.1)无法加载React Developer Tools(v4.28.0)
    POJ3322 Bloxorz I 题解
    conda安装与镜像源配置
    【白嫖8k买的机构vip教程】Appium自动化(3):Appium-Desktop界面介绍
    k8s调度之污点和容忍
    双十一数码产品选购指南,2022年数码产品选购清单
    数据结构(十一) -- 树(三) -- 堆排序
    ESP8266-Arduino编程实例-OLED显示DHT22传感器数据
    SpringBoot项目创建及运行
    数据结构——三路划分(快排优化)
  • 原文地址:https://blog.csdn.net/weixin_43845922/article/details/127793087