这是我们手写的 CNN 网络中第三个经典算法。
在 resnet50 这个神经网络中,总共有 conv , bn, relu, pooling, fc(全连接), softmax 这几个经典算法。
而conv,pooling 在之前的章节已经手写过了,relu 属于一行代码就可以写完的算法,很简单可以暂时忽略,fc(全连接)可以直接用 conv 替换,或者简化一下 conv 的逻辑就可以,softmax 的算法在后面实践时可用可不用。
也就是说,核心算法只剩下 bn 这一个了,这么一看,其实一个经典的神经网络算法并不是多,关键就是如何灵活使用,以及如果做算法等价变换。
在手写完 bn 这个算法之后,后面就基本可以进入到网络结构方面的内容,然后一步步的将网络结构用我们手写的算法搭建起来,这样离完成一个神经网络的推理就不远了,继续加油。
还是先继续 bn 这一个算法的实现吧,它的原理和背景参考前两节内容。
bn 的算法说的是在 mini-batch 中进行归一化,这里我们只做推理,不做训练,因此我们针对推理部分来写。
首先,推理和训练的区别就在于,训练时输入给模型的是很多张图片,用我们习惯的数据表示方法是[n, h, w, c], 其中 n 代表的是 n 张图片,h,w,c分别为图片的长宽和通道数。
在推理时,n = 1,也就是说,我们一次只会推理一张图片。
那么此时 bn 算法就变得很简单了。在训练过程已经把累计平均值和累计方差计算出来了,并且作为了 bn 这一层的参数,我们直接拿来用就行。
<