首页 > 解决方案 > 推理时张量流中的批量标准化

问题描述

My x is -1.593087986111640930e-02,
beta is 4.061257466673851013e-02,  
moving mean is -1.356904511339962482e-03, 
moving variance is 4.480824827624019235e-06 
gamma is false so result will not scale 
epsilon = 0.001

x_hat = (x - moving_mean) / square_root_of(moving_variance + epsilon) 
y = gamma * x_hat + beta

当我手动计算时,y 给出 -0.4192285

但在张量流中,y 给出 -6.781823635101318359e-01

为什么会这样?在张量流中批量归一化的推理时间这个方程是否正确?这里我使用的是 tensorflow.contrib.slim.batch_norm 函数。

标签: tensorflowmachine-learningdeep-learning

解决方案


你的 epsilon 太大了。看看你的移动方差,它大约是 1e-6,你将 1e-3 添加到它作为 epsilon!

当您将 epsilon 更改为更合适的内容时(想想 1e-9),它会更接近 TF 提供的内容。人们添加 epsilon 的唯一原因是避免除以 0,这甚至在 tf.batch_normalization 页面上都有说明,因此 1e-3 太高了: https ://www.tensorflow.org/api_docs/python/tf/nn /batch_normalization


推荐阅读