- 🍨 本文为 🔗365天深度学习训练营中的学习记录博客
- 🍖 原作者: K同学啊

🏡 我的环境:
语言环境:Python3.10
编译器:Jupyter Lab
深度学习环境:torch==2.5.1 torchvision==0.20.1
------------------------------分割线---------------------------------

该代码定义了一个残差单元,包含以下部分:
- 捷径连接(shortcut)处理
- 主路径的三层卷积层结构
- 分组卷积的实现
- 最终的残差连接和激活
这部分代码在功能上没有问题,但有一个需要注意的点:
主路径的最后一层卷积输出通道数是filters * 2
,这与捷径分支的通道数保持一致(当conv_shortcut=True
时)。这是正确的设计,保证了两个分支可以相加。
分析一下潜在的通道数和尺寸匹配问题:
-
当
conv_shortcut=True
时:- shortcut分支:输出通道数为
filters * 2
- 主路径:最终输出通道数也为
filters * 2
- 尺寸变化:shortcut使用
strides
参数调整尺寸
- shortcut分支:输出通道数为
-
当
conv_shortcut=False
时:- shortcut直接使用输入
x
- 则直接将输入张量 x 作为快捷连接。
- 在这种情况下,即使通道数不一致也不会报错的可能原因如下:此时,shortcut 的维度不同于 x 的维度。但是,由于 Add 层具有广播机制,因此会自动对两个输入进行广播,以使它们的维度相同。这是因为 Add 层会在计算中使用广播机制,这使得在执行相加操作之前,较小张量的形状会被扩展以匹配较大张量的形状。具体来说,如果 shortcut 的形状是 (h, w, c1),x 的形状是 (h, w, c2),其中 c1 不等于 c2,则 shortcut 会被自动扩展为 (h, w, c2),使得 x 和 shortcut 的形状相同。因此,即使通道数不一致,也可以进行相加操作。
- shortcut直接使用输入