denseNet思想

DenseNet是一种卷积神经网络结构,其核心在于每一层网络的输入不仅包括当前层的输入,还包括前面所有层的输出。这有助于提升信息和梯度在网络中的传输效率,并能有效利用特征重用,减少参数量,提高网络的训练深度。本文详细介绍了DenseNet的设计理念、特点及其如何克服传统网络中的梯度消失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 和ResNet的区别:ResNet是求和,而DenseNet是做一个拼接。**每一层网络的输入为:当前输入+前面所有层网络的输出。**第L层的输入等于K x (L-1) + k0,其中k是生长率,表示每一层的通道数。
  2. 提升信息和梯度在网络中的传输效率:每层都能直接从损失函数拿到梯度,并且直接得到输入信号。目的:训练更深的网络,有正则化的效果。
  3. 其他网络致力于从深度和宽度来提升网络性能,而DenseNet从特征重用的角度来提升网络性能

细节:

  1. 一个完整的dense net,包括3个dense block。
  2. 在block之间没有dense连接,因为在pooling操作之后,改变了feature maps的大小,这时候就没法做dense 连接了。
  3. 在两个block之间的是transition layer ,包括了conv ,pool。(在实验中使用的是1个BN、1个1x1卷积和一个2x2 avg pool)目的:降低冗余。缓解梯度消失,省参数省计算,特征重用可以抗过拟合。达到相同的精度,dense net只需要res net一半的参数和一半的计算量。
  4. 密集连接会使网络显得比较冗余,所以DenseNet将每一层都设计的特别窄,Dense Block中的每个单元都是一个bottleneck layer,其中包括一个 1x1 卷积和一个3x3卷积。
  5. 1个block中有m个feature maps,通过一个0-1之间的参数来限制输出的feature maps数量。m -> theata x m。目的:降低参数量(GoogleNet也是用这种方式)
  6. 问题: DenseNet的内存主要耗费在拼接过程,每次拼接都会开辟新的内存空间。**解决:**使用共享内存。
  7. 问题: forward和backward的内存依赖,粉红色是forward,深红色是backward。Forward的时候内存不能释放,backward的时候可以。forward依赖backword。**解决:**保留forward或在计算backword的时候重新计算forward。后者会多耗费15%的时间,但节省70%的空间。

https://blog.csdn.net/bryan__/article/details/77337109

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值