ResNet学习笔记
#随着神经网络层数的加深,当模型开始收敛时,会出现模型退化问题,ResNet 主要就是为了解决模型的退化问题而提出的。在一个残差模块当中一般只跨两道三层,这里给出一种看、跨三层的残差模块。如图一,通过“shortcut connections(捷径连接)”的方式,直接把输入x传到输出作为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。于是,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,因此,后面的训练目标就是要将残差结果逼近于0。这种残差网络在较深的的网络中得到不错的表现。
接下来我们介绍一种新的残差模块的结构。如图二所示,这种残差模块的结构中,在捷径连接上和最后的连接出都是用恒等映射,并改变bn和relu的位置,使用预激活和预bn的方式。
下面给出tensorflow的代码。
def convolutional_block(X,f,filters,stage,block,s=2):
“”"
param :
X – 输入的张量,维度为(m, n_H_prev, n_W_prev, n_C_prev)
f – 整数,指定主路径的中间 CONV 窗口的形状(过滤器大小)
filters – python整数列表,定义主路径的CONV层中的过滤器
stage – 整数,用于命名层,取决于它们在网络中的位置
block --字符串/字符,用于命名层,取决于它们在网络