1 前言
今天在学习ResNet~
一直在学习和研究ResNet,不过有些东西一直没有弄懂,觉得还是需要通过实验来验证一下,
今天在学习CS231n时,Yang助教又讲到ResNet,这里我们再来复习和梳理一下ResNet的创作思想~
首先,ResNet解决了一个什么样的问题呢?
2 恒等映射的问题
根据Yang助教的说法,ResNet想要解决的问题是“恒等映射的问题”,
也就是,CNN网络无法拟合恒等映射;
具体来说,就是:何教授认为,“conv+relu+conv”的三层结构无法拟合恒等映射,也就是,函数映射:
f
(
x
)
:
y
=
x
f(x): \boldsymbol y =\boldsymbol x
f(x):y=x。
(这里的我们将应变量和自变量都用函数表示,因为从广义看来,机器学习中所拟合的所有映射,最终都可以认为是两个列向量之间的函数映射)
那么实际情况是这样吗?
我们可以跟随吴教授在机器学习中的学习次序,来一一进行分析,
我们在 Machine Leanring课程中,依次学习的机器学习算法分别为:线性回归、逻辑回归和神经网络(NN网络)算法,其中,CNN网络可以看做NN网络的一种简化网络。
首先,我们来看看线性回归,
对于线性回归来说,其模型的函数映射为:
y
=
W
x
+
b
\boldsymbol y =\boldsymbol W \boldsymbol x+b
y=Wx+b,
可以看到,线性回归是可以拟合恒等映射的,
当
W
\boldsymbol W
W为单位矩阵,
b
=
0
b=0
b=0时,则有
y
=
W
x
+
b
=
x
\boldsymbol y =\boldsymbol W \boldsymbol x+b=\boldsymbol x
y=Wx+b=x,即实现了恒等映射;
我们再来看看逻辑回归,
3 PyTorch代码阅读笔记
4 PaddleDetection代码阅读笔记
PaddleDetection中resnet的实现链接PaddleDetection–resnet.py
4.1 Module备注
_conv_norm—也就是conv+norm+relu
这里的_conv_norm
也就是“conv+norm+relu”三者的合并;
4 备注
4.1 50层以上的ResNet和50层以下ResNet在实现上有什么区别?
50层以上的ResNet,例如:ResNet-101,使用了Bottleneck的结构,它会使得层数增加4倍,具体来说,就是输出的特征图的channel数是输入特征图channel的4倍,(而一般的Block输入输出的层数相同),
在PyTorch官方实现中,用 expansion = 4表示这个;
inplanes是输入的维度,对应Conv2d()
的in_channels
参数;
planes是输出维度,对应BatchNorm2d
的num_features
参数;
4.2 为什么PyTorch官方实现时,conv函数的 bias = False?
因为PyTorch的官方实现在卷积层后面加入了BN的操作,BN技术中会为参数的分布添加偏置参数,所以就不需要使用conv的bias参数了;