CS231n简介
详见 CS231n课程笔记1:Introduction。
本文都是作者自己的思考,正确性未经过验证,欢迎指教。
作业笔记
Batchnorm的思想简单易懂,实现起来也很轻松,但是却具有很多优良的性质,具体请参考课程笔记。下图简要介绍了一下Batchnorm需要完成的工作以及优点(详情请见CS231n课程笔记5.3:Batch Normalization):
需要注意的有:
- 最后一步对归一化后的数据进行平移与缩放,且此参数可学习。
- 上诉参数对于x的每一维都具有相应的参数,故假设X.shape = [N,D],那么gamma.shape = [D,]
1. 前向传播
这里即实现上图所诉功能,需要注意的有:
- out_media的命名是为了后向传播的时候处理方便
- 使用var而不是std,这既符合图中公式,又方便了后向传播
- 计算out_media的时候,减法以及除法都做了broadcasting,对应于反向传播的时候sum
- 同理,计算out的时候,加法以及乘法也都做了broadcasting
注:broadcasting的部分请参考python、numpy、scipy、matplotlib的一些小技巧。
if mode == 'train':
mean = np.mean(x,axis = 0)
var = np.var(x,axis = 0)
running_mean = running_mean * momentum + (1-momentum) * mean
running_var = running_var * momentum + (1-momentum) * var
out_media = (x-mean)/np.sqrt(var + eps)
out = (out_media + beta) * gamma
cache = (out_media,x,mean,var,beta,gamma,eps)
elif mode == 'test':
out = (x-running_mean)/np.sqrt(running_var+eps)
out = (out + beta) * gamma
cache = (out,x,running_mean,running_var,