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给出了as -0.4192285
但在tensorflow y中给出的是as -6.781823635101318359e-01
为什么会发生这种情况?在tensorflow中进行批量规范化的推理时,这个公式是否正确?这里我使用的是tensorflow.contrib.slim.batch_norm函数。
发布于 2019-12-10 11:22:33
你的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
https://stackoverflow.com/questions/59253592
复制相似问题