博客
关于我
batch norm参数
阅读量:272 次
发布时间:2019-03-01

本文共 1695 字,大约阅读时间需要 5 分钟。

在阅读源码的过程中,BN代码部分出现了一些之前没见过的参数,在这里总结一下(用小写字母代表,具体出现在各个程序的源码中可能有区别,但是大致应该相同)。

  • epsilon:防止normalization过程中分母出现为0的情况,一般设置为很小的值(例如1e-5),如下是batch norm的算法描述过程,在算法第四步中分母部分出现了epsilon

    在这里插入图片描述

  • momentum:batch norm需要计算加权移动平均数(EMA),momentum就是移动平均值的权重,如下是代码例子,在代码的21行和22行就是momentum(权重)的使用。

def Batchnorm_simple_for_train(x, gamma, beta, bn_param):"""param:x    : 输入数据,设shape(B,L)param:gama : 缩放因子  γparam:beta : 平移因子  βparam:bn_param   : batchnorm所需要的一些参数	eps      : 接近0的数,防止分母出现0	momentum : 动量参数,一般为0.9, 0.99, 0.999	running_mean :滑动平均的方式计算新的均值,训练时计算,为测试数据做准备	running_var  : 滑动平均的方式计算新的方差,训练时计算,为测试数据做准备"""	running_mean = bn_param['running_mean']  #shape = [B]    running_var = bn_param['running_var']    #shape = [B]	results = 0. # 建立一个新的变量    	x_mean=x.mean(axis=0)  # 计算x的均值    x_var=x.var(axis=0)    # 计算方差    x_normalized=(x-x_mean)/np.sqrt(x_var+eps)       # 归一化    results = gamma * x_normalized + beta            # 缩放平移    running_mean = momentum * running_mean + (1 - momentum) * x_mean    running_var = momentum * running_var + (1 - momentum) * x_var        #记录新的值    bn_param['running_mean'] = running_mean    bn_param['running_var'] = running_var     	return results , bn_param
  • use_precise_stats:在使用batch norm的时候,训练的时候有batch的概念,但是测试的时候并没有batch,所以在测试的时候需要找到一个适当的值来进行normalization,这个值就是EMA(上述的滑动平均数),但是EMA仅仅是一个估计值,当训练的时候计算的EMA不能很好的估计到测试的时候的均值和方差的时候(EMA的计算方式有问题或者batch和model不稳定),batch norm就会失效。

    EMA计算公式
    在EMA的计算过程中,如果lamda过小,那么最近的均值对EMA贡献过大,就会产生很大的偏差,如果lamda过大,那么需要大量的迭代才能得到结果(通常的lamda取值范围是0.9~0.99)
    在这里插入图片描述
    将模型固定住,取一定数量的batch,计算真正的均值和方差(不是EMA),这就是precise batch norm,batch的数量也是一个超参数。
    在这里插入图片描述
    注意precise batch norm不是一个主流的方法,因为EMA通常是有效的(lamda足够大,模型会迭代训练很多轮,选取的模型在经过一定的迭代后会稳定下来)。

  • num_batches_precise:在precise batchnorm中计算平均数使用的batch数量。

参考:

转载地址:http://mrvx.baihongyu.com/

你可能感兴趣的文章
nginx net::ERR_ABORTED 403 (Forbidden)
查看>>
vue中处理过内存泄露处理方法
查看>>
Nginx RTMP 模块使用指南
查看>>
Nginx SSL 性能调优
查看>>
nginx ssl域名配置
查看>>
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 做负载均衡的几种轮询策略分析
查看>>
Nginx 入门,一篇搞定!
查看>>
Nginx 利用代理转发请求示例
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理+负载均衡
查看>>
Nginx 反向代理解决跨域问题
查看>>