上一节介绍了残差结构,还不清楚的同学可以返回上一节继续阅读。
到了这里,一个残差结构需要的算法基本都介绍完了,至少在 Resnet 这种神经网络中的残差结构是这样的。
本节我们做一个实战,基于之前几节中手写的 conv / bn 算法,来搭建一个残差结构。其中,relu 的实现和 add 的实现很简单。
relu 算法的实现用 python 来写就一行:
def ComputeReluLayer(img):
res = np.maximum(0, img)
return res
其中 img 是 relu 的输入数据,取输入数据和零的最大值即可, res 就是经过 relu 激活的结果。
而加法节点的实现就更简单,在 python 中就一个加法操作符就可以完成。
先看一下 resnet 中的残差结构图,在resnet50中,有两种残差结构,一种是如下的结构。
图中红框标注的是其中一种残差结构,这个结构的特点是左侧分支有3个卷积,每个卷积后面有一个 relu 激活函数。
你可能会问,左侧最后的一个卷积后面没有 relu 啊,这是因为左侧最后的一个卷积会和右侧的一个卷积相加,加完之后的结果再做 relu,实际上也相当于卷积后面都会有个relu。只要在卷积后面有一个 relu 激活函数,