在残差网络(ResNet)中,残差学习的核心思想是让网络学习输入与输出之间的残差,而不是直接学习输入映射到输出的函数。为了保证学习到的是残差而不是原始映射与原输入的简单相加,即:
如何避免学习到原始映射
- 默认初始状态
在初始化时,主路径中的卷积核和其他参数通常会初始化为接近于0的值,这意味着在网络训练初期,F(x)的值接近于0。这使得在初始时刻,残差块的输出几乎等于输入 x,即 H(x)≈x。随着训练的进行,网络逐渐学习到输入的残差,而非直接复制输入。
# 对网络中的所有模块进行初始化
for m in self.modules():
if isinstance(m, nn.Conv2d): # 如果是卷积层
# 使用Kaiming正态分布初始化卷积层权重 用 Kaiming 正态分布(通常是以 0 为均值的高斯分布)来初始化权重
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
- 跳跃连接
跳跃连接保证了即使 F(x)学到的内容很少或完全为零,残差块的输出 H(x) 仍然可以有效地传递输入 x。
7467

被折叠的 条评论
为什么被折叠?



