Notes on Section 7.7

bobown_yao

在上一节我们展开解释了ResNet,ResNet等同于把一个复杂函数展开成一个简单的线性项和另一个复杂的非线性项。这引出一个想法,也就是我们是否可以加深我们的分解

Image: image_001

在ResNet部分,我们会注意到为了向下传递信息,有时候需要改变通道结构和空间结构,这会造成信息的变形。

DenseNet提出了另外一种解决方法,即使用通道的拼接而非相加。

我们最终会得到如下映射结构

Image: image_002

图像上可以这样理解

Image: image_003

我们担心的,关于需要张量形状相同而不得不改变源数据的问题解决了,因为在这套方案中,根本不需要改变原数据的结构,而特征的到了保留

但是这里有个问题,如果我们的输入通道数量和输出通道数量差不多,那么参数不就爆炸了吗

我们先从代码实现的角度看denseblock(其中的Conv_block已经定义为带有BN的卷积层)

Image: image_004

在这里我们可以观察到整个网络的结构,也就是多层卷积层,每一层的输入数量是上一层的输入数量+num_channels,也就是我们希望新增加的特征数量,而输出数量则等同于num_channels。

在这里num_channels控制了输入通道了宽度,所以也称为增长率(growth rate)

因为DenseBlock对通道数增长的影响是显著的,所以我们需要在卷积层前预处理通道,也成为过渡层(也就是输出通道还是num_channels,但是输入通道不再是num_channels+上一层的合并数据),这里非常自然的会使用1*1卷积层来处理。同时我们还可以加入步幅大于1的AvgPool来减少空间维度的大小

代码实现如下

Image: image_005

整体网络的结构如下,首先使用了和ResNet相同的单卷积层和最大汇聚层,然后交替使用稠密块和转换/过渡层,最后是全局汇聚层和全连接层

Image: image_006

  • Title: Notes on Section 7.7
  • Author: bobown_yao
  • Created at : 2026-01-24 00:00:00
  • Updated at : 2026-03-08 19:46:44
  • Link: https://bobownyao.github.io/2026/01/24/Notes-on-Section-7-7/
  • License: All Rights Reserved © bobown_yao
On this page
Notes on Section 7.7