TensorFlow docs for tf.train.ExponentialMovingAverage说,
运行ops以保持移动平均值,每个阴影 变量使用以下公式更新:
shadow_variable - =(1 - 衰变)*(shadow_variable - 变量)
这在数学上等同于下面的经典公式,但是 使用assign_sub op(公式中的" - =")允许 对变量的并发无锁更新:
shadow_variable = decay * shadow_variable +(1 - decay)* variable
为什么第一个公式允许比第二个公式更多并发?我怎么知道我自己的代码是否因为一些微妙的锁定问题而导致不必要的锁定?
答案 0 :(得分:1)
假设您同时在多个线程中并行启动shadow_variable=
更新。线程完成后,shadow_variable
将获得由最慢线程计算的值,因此浪费了其他线程的计算。为了防止这种情况,您可以引入某种锁定机制,或使用-=
版本