【PyTorch学习】(二)DenseNet代码研读

本文详细介绍了DenseNet的结构,包括Dense layer、Dense block、Transition layer,并通过PyTorch代码进行解析。DenseNet以较少的参数和计算量实现了与ResNet相当的性能,且具有优秀的抗过拟合能力,通过密集连接有效地缓解了梯度消失问题。

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

论文:Densely Connected Convolutional Networks 

论文链接:https://arxiv.org/pdf/1608.06993.pdf 

代码的github链接:https://github.com/liuzhuang13/DenseNet 

PyTorch实现链接:https://pytorch.org/docs/0.4.0/_modules/torchvision/models/densenet.html#densenet121

 

DenseNet的构造思路以及算法细节,参考该篇博客即可,博主已经介绍的挺好的:

https://blog.youkuaiyun.com/u014380165/article/details/75142664/

 

论文中,作者用两个式子,很好的解释了DenseNet与ResNet之间的本质差异:

ResNet: DenseNet:

再贴一张DenseNet的网络结构图,有助于下面理解代码:

下面直接通过源码来理解DenseNet的思想,Let's go ~!

 

一、Dense layer

Dense layer是一个类似bottle neck的结构,所以源码作者也称其为bottleneck layer,但有些许差别

可以看下面这张图,每两层之间都建立了一个连接。

class _DenseLayer(nn.Sequential):
    def __init__(self, num_input_features, growth_rate, bn_size, drop_rate):
        super(_DenseLayer, self).__init__()
        # 1.Dense layer的结构参照了ResNetV2的结构,BN->ReLU->Conv
        # 2.与ResNet的bottleneck稍有不同的是,此处仅做两次conv(1*1conv,3*3conv),不需要第三次1*1conv将channel拉升回去
        # 由于Dense block中Tensor的channel数是随着Dense layer不断增加的
        # 所以Dense layer设计的就很”窄“(channel数很小,固定为growth_rate),每层仅学习很少一部分的特征
        # 3.想象一下,如果设计的和bottleneck一样
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值