0
点赞
收藏
分享

微信扫一扫

ResNet与Densenet之间的关系以及区别

eelq 2022-04-30 阅读 74

一、resnet和densenet的之间的关系以及区别,如参数量和训练速度。

简单介绍下resnet以及densenet

  • resnet的最大的贡献是缓解深层的神经网络训练中的梯度消失问题,主要是利用shortcut的技术可以加深网络的深度而没有退化。反向传播时,梯度可能会在距离输入近的地方中产生消失的现象,既然离输入近的神经网络层较难训练,则可以将它短接到更加靠近输出的地方。因为直接映射是难以学习的,而ReseNet学习的是残差,这是更容易学习的。shortcut的设计是将模块的输入和输出连接在一起,然后在元素层面上进行加(add),相当于跨过中间层,进行简单的同等映射,这样做不会产生额外的参数,不会增加计算的复杂度,而且保证至少加深后网络的性能不会比加深前差。

  • densenet主要是基于resnet的shortcut的思想,不同的是采用的是一种更密集的连接方式,是一个密集卷积神经网络,以前向传播方式,将每一层与其余层密集连接。这样做的目的是可以确保各层之间的信息流动达到最大,将所有层(特征图大小匹配)直接连接在一起,注意这里是维度上相加(concat)。

  • 相对rensent,DenseNet有以下几个显著特点:
    (1)更好地缓解了梯度消失问题
    (2)增强了特征在网络间的传播
    (3)实现和加强了特征重用
    (4)有效减少了参数数量

densenet参数比resnet参数少的原因:

  1. 每一次卷积输入输出的chanenl个数要比resnet少很多。
  2. 全连接层的参数也比resnet少很多。

densenet训练速度比resnet训练慢的原因:

  1. densenet的featuremap比resnet大很多,导致卷积过程的计算量比resnet大很多,简而言之就是flops要大一些,内存的占用要大一些。
  2. 内存的访问次数要多很多,内存的访问是很慢的。因为densenet是一种密集的连接方式。每一层的输入是前面每一层的特征,因为每当进行新的一层计算,需要读取前面所有层,因此需要频繁读取内存。
附一下如何计算模型的参数量
from torchstat import stat
import torchvision

densenet = torchvision.models.densenet121()
stat(densenet, (3,244,244))

参考:谈一谈ResNet和DenseNet

举报

相关推荐

0 条评论