目录
卷积残差块——The convolutional block
-
恒等残差块——The identity block
The identity block是ResNets中使用的标准块,对应于输入激活(例如 a [1])与输出激活具有相同维度(例如a [l +2])。
(1)、两层恒等残差块
下图展示了ResNets的两层的恒等残差块 identity block:
上面的路径是“shortcut path”,下面的路径是“main path”,在这个图中,同样也进行了CONV2D和ReLU操作,为了加速训练的速度也加入了Batch正则化“Batch Norm”,Batch Norm在Keras框架中就一句代码。
(2)、三层恒等残差块
在下面的这个例子中,将实际上实现一个略微更强大的版本,这个跳转连接“跳过”3个隐藏层而不是2层。
(3)、下面是细节的步骤:
a、主路径的第一部分:
第一个CONV2D的过滤器F1大小是(1*1),步长s大小为(1*1),卷积填充padding="valid"即无填充卷积。
将这一部分命名为conv_name_base+'2a',初始化时利用种子为seed=0。
第一个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'2a'
.
应用ReLU激活函数,这里没有超参数。
b、主路径的第二部分:
第二个CONV2D的过滤器F2大小是(f*f),步长s大小为(1*1),卷积填充padding="same"即相同卷积。
将这一部分命名为conv_name_base'2b',初始化时利用种子为seed=0。
第二个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'2b'
.
应用ReLU激活函数,这里没有超参数。
c、主路径的第三部分:
第三个CONV2D的过滤器F3大小是(1*1),步长s大小为(1*1),卷积填充padding="valid"即无填充卷积。
将这一部分命名为conv_name_base+'2c',初始化时利用种子为seed=0。
第三个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base +'2c'
.
这一部分中没有应用ReLU激活函数。
d、最后部分:
将shortcut和输入一起添加到模块中,然后再应用ReLU激活函数,这里没有超参数。
-
卷积残差块——The convolutional block
(1)、综述
ResNet的convolutional_block是另一种类型的残差块,当输入和输出尺寸不匹配时,可以使用这种类型的块。
与identity block恒等残差块不同的地方是:在shortcut路径中是一个CONV2D的层。
shortcut路径中的CONV2D层用于将输入x调整为不同的尺寸,以便在添加shortcut残差块的值返回到主路径时需要最后添加的尺寸相匹配(与矩阵Ws的作用相同)。例如,要将激活值维度的高度和宽度缩小2倍,可以使用步长为2的1x1卷积。shortcut路径上的CONV2D层路径不使用任何非线性激活函数。 它的主要作用是只应用一个(学习的)线性函数来减小输入的尺寸,使得尺寸匹配后面的添加步骤。
(2)、convolutional_block的细节步骤
a、主路径第一部分
第一个CONV2D的过滤器F1大小是(1*1),步长s大小为(s*s),卷积填充padding="valid"即无填充卷积。
将这一部分命名为conv_name_base+'2a'。
第一个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'2a'
.
应用ReLU激活函数,这里没有超参数。
b、主路径第二部分
第二个CONV2D的过滤器F2大小是(f*f),步长s大小为(1*1),卷积填充padding="same"即相同卷积。
将这一部分命名为conv_name_base+'2b',初始化时利用种子为seed=0。
第二个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'2b'
.
应用ReLU激活函数,这里没有超参数。
c、主路径第三部分
第三个CONV2D的过滤器 F3大小是(1*1),步长s大小为(1*1),卷积填充padding="valid"即无填充卷积。
将这一部分命名为 conv_name_base+'2c',初始化时利用种子为seed=0。
第三个BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'2c'
.
这一部分中没有应用ReLU激活函数。
d、shortcut 路径
该部分CONV2D的过滤器 F3大小是(1*1),步长s大小为(s*s),卷积填充 padding="valid"即无填充卷积。
将这一部分命名为conv_name_base+'1'。
该部分BatchNorm是在通道/厚度的轴上进行标准化,并命名为bn_name_base+'1'
e、最后部分
将shortcut和输入一起添加到模块中,然后再应用ReLU激活函数,这里没有超参数。