DenseNet模型[通俗易懂]

DenseNet模型[通俗易懂]《DenselyConnectedConvolutionalNetworks》阅读笔记代码地址:https://github.com/liuzhuang13/DenseNet首先看一张图:稠密连接:每层以之前层的输出为输入,对于有L层的传统网络,一共有LL个连接,对于DenseNet,则有L(L+1)2\frac{L(L+1)}2。这篇论文主要参考了HighwayNetw

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

《Densely Connected Convolutional Networks》阅读笔记

代码地址:https://github.com/liuzhuang13/DenseNet

首先看一张图:
这里写图片描述
稠密连接:每层以之前层的输出为输入,对于有L层的传统网络,一共有 L 个连接,对于DenseNet,则有

L(L+1)2

这篇论文主要参考了Highway Networks,Residual Networks (ResNets)以及GoogLeNet,通过加深网络结构,提升分类结果。加深网络结构首先需要解决的是梯度消失问题,解决方案是:尽量缩短前层和后层之间的连接。比如上图中, H4 层可以直接用到原始输入信息 X0 ,同时还用到了之前层对 X0 处理后的信息,这样能够最大化信息的流动。反向传播过程中, X0 的梯度信息包含了损失函数直接对 X0 的导数,有利于梯度传播。
DenseNet有如下优点:
1.有效解决梯度消失问题
2.强化特征传播
3.支持特征重用
4.大幅度减少参数数量

接着说下论文中一直提到的Identity function:
很简单 就是输出等于输入 f(x)=x
这里写图片描述

传统的前馈网络结构可以看成处理网络状态(特征图?)的算法,状态从层之间传递,每个层从之前层读入状态,然后写入之后层,可能会改变状态,也会保持传递不变的信息。ResNet是通过Identity transformations来明确传递这种不变信息。

网络结构:
这里写图片描述
每层实现了一组非线性变换 Hl(.) ,可以是Batch Normalization (BN) ,rectified linear units (ReLU) , Pooling , or Convolution (Conv). 第 l 层的输出为

xl

对于ResNet:

xl=Hl(xl1)+xl1



这样做的好处是the gradient flows directly through the identity function from later layers to the earlier layers.

同时呢,由于identity function 和 H的输出通过相加的方式结合,会妨碍信息在整个网络的传播。

受GooLeNet的启发,DenseNet通过串联的方式结合:

xl=Hl([x0,x1,...,xl1])

这里 Hl(.) 是一个Composite function,是三个操作的组合: BN>ReLU>Conv(3×3)

由于串联操作要求特征图 x0,x1,...,xl1 大小一致,而Pooling操作会改变特征图的大小,又不可或缺,于是就有了上图中的分块想法,其实这个想法类似于VGG模型中的“卷积栈”的做法。论文中称每个块为DenseBlock。每个DenseBlock的之间层称为transition layers,由 BN>Conv(1×1)>averagePooling(2×2) 组成。

Growth rate:由于每个层的输入是所有之前层输出的连接,因此每个层的输出不需要像传统网络一样多。这里 Hl(.) 的输出的特征图的数量都为 k

k
即为Growth Rate,用来控制网络的“宽度”(特征图的通道数).比如说第 l 层有

k(l1)+k0
的输入特征图, k0 是输入图片的通道数。

虽然说每个层只产生 k 个输出,但是后面层的输入依然会很多,因此引入了Bottleneck layers 。本质上是引入1×1的卷积层来减少输入的数量,

Hl
的具体表示如下

BN>ReLU>Conv(1×1)>BN>ReLU>Conv(3×3)



文中将带有Bottleneck layers的网络结构称为DenseNet-B。

除了在DenseBlock内部减少特征图的数量,还可以在transition layers中来进一步Compression。如果一个DenseNet有m个特征图的输出,则transition layer产生 θm 个输出,其中 0<θ1 。对于含有该操作的网络结构称为DenseNet-C。

同时包含Bottleneck layer和Compression的网络结构为DenseNet-BC。
具体的网络结构:

这里写图片描述

实验以及一些结论
在CIFAR和SVHN上的分类结果(错误率):
这里写图片描述
L 表示网络深度,

k
为增长率。蓝色字体表示最优结果,+表示对原数据库进行data augmentation。可以发现DenseNet相比ResNet可以取得更低的错误率,并且使用了更少的参数。
接着看一组对比图:
这里写图片描述
前两组描述分类错误率与参数量的对比,从第二幅可以看出,在取得相同分类精度的情况下,DenseNet-BC比ResNet少了 23 的参数。第三幅图描述含有10M参数的1001层的ResNet与只有0.8M的100层的DenseNet的训练曲线图。可以发现ResNet可以收敛到更小的loss值,但是最终的test error与DenseNet相差无几。再次说明了DenseNet参数效率(Parameter Efficiency)很高!

同样的在ImageNet上的分类结果:
这里写图片描述
右图使用FLOPS来说明计算量。通过比较ResNet-50,DenseNet-201,ResNet-101,说明计算量方面,DenseNet结果更好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187946.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月18日 上午7:37
下一篇 2026年4月18日 上午7:43


相关推荐

  • javascript邮箱正则表达式_email正则表达式

    javascript邮箱正则表达式_email正则表达式”^\s*\w+(?:\.{0,1}[\w-]+)@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)\.[a-zA-Z]+\s*$”这个是一个企业级的程序里copy出来的。合法E-mail地址:必须包含一个并且只有一个符号“@”不允许出现“@.”或者.@允许“@”前的字符中出现“+”不允许“+”在最前面,或者“+@”正则表达式如下:^(\w+((-\w+)|(.\w+)))+\w+…

    2026年3月5日
    6
  • Linux用telnet判断端口是否通

    Linux用telnet判断端口是否通通的[root@1222~]#telnet127.0.0.14531Trying127.0.0.1…Connectedto127.0.0.1.Escapecharacteris’^]’.不通[root@1222~]#telnet127.0.0.14581Trying127.0.0.1…telnet:connecttoaddress127.0.0.1:Connectionrefused退出方式1.输入Ctrl+】键,然后

    2025年8月23日
    6
  • 离散数学期末复习笔记【精华版】

    离散数学期末复习笔记【精华版】文章目录前言一 理逻辑 1 命题逻辑 2 等值演算 3 主合取范式 主析取范式 4 题 推理证明 5 辖域 自由变元 约束变元二 合 1 环和 环积 幂集 笛卡尔乘积三 关系 1 自反 对称 传递 2 amp 3 合成运算 逆关系 闭包 4 哈斯图 上下界 偏序 5 等价关系 划分四 1 幺元 么元 单位元 零元 逆元 半群 群 阿尔贝群 独异点 循环独异点 2 题 由表判断 3 题 证明五 论 1 简单图 平凡图 多重图 子图 补图 出度 入度

    2026年3月20日
    3
  • 光场相机介绍_光场相机是什么

    光场相机介绍_光场相机是什么魅族在flyme3.3上推出光场相机:

    2025年5月24日
    4
  • iso配置yum源[通俗易懂]

    iso配置yum源[通俗易懂]iso配置yum源:1、上传iso文件;2、mount挂载iso文件:mount-oloop-tiso9660/opt/rhel-server-.iso/mnt/iso3、配置/etc/yum.repos.d目录下的repo文件,注意备份系统原有的repo文件[iso]name=isobaseurl=file:///mnt/isogpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-betafailovermethod=priorit

    2022年8月13日
    7
  • jvm的垃圾回收算法_jvm垃圾回收策略

    jvm的垃圾回收算法_jvm垃圾回收策略前言相比C语言,JVM虚拟机一个优势体现在对对象的垃圾回收上,JVM有一套完整的垃圾回收算法,可以对程序运行时产生的垃圾对象进行及时的回收,以便释放JVM相应区域的内存空间,确保程序稳定高效的运行,但在真正了解垃圾回收算法之前,有必要对JVM的对象的引用做一个简单的铺垫JVM对象可达性分析算法Java虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着GCRoot对象为起点的引用链找到该对象,找不到表示可以被回收想象一下,对象在什么情况下会被认为是垃圾对象呢?

    2025年10月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号