使用 ExponentialMovingAverage 的 tensorflow CNN 教程代码中的潜在错误?
Potential bug in tensorflow CNN tutorial code using ExponentialMovingAverage?
我正在研究使用 cifar10 数据集训练 CNN 的 tensorflow 卷积神经网络教程的代码。源代码位于 Gihub and the document in Document 中。
我的问题具体是关于 cifar10.py
第 375-378 行中 ExponentialMovingAverage
(doc here) 的使用。这是
with tf.control_dependencies([apply_gradient_op, variables_averages_op]):
train_op = tf.no_op(name='train')
return train_op
这里,variables_averages_op
是一个更新所有影子变量的操作,apply_gradient_op
是一个将计算梯度应用于所有原始变量的操作(更新原始变量,a.k.a. 模型权重).
由于control_dependencies
不保证其传递参数的执行顺序,因此本例中apply_gradient_op
和variables_averages_op
的执行顺序是任意的,这进一步表明在 运行 和 train_op
上,我们最终可以先更新原始变量,然后更新相应的影子变量,或者在 原始变量之前更新影子变量。后一种我觉得不合理
根据ExponentialMovingAverage
(link上面的官方文档,影子变量的更新依赖于原始变量:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
原始变量的更新应该在阴影变量的更新之前,教程代码中不是这样。
谁能帮我解决这个问题?谢谢。
我相信你是对的。它看起来确实像是示例中的错误。这在实践中可能并不重要,因为变量更新和移动平均更新的顺序很可能是稳定的。就算是"wrong"单,最坏的情况下,你的均线也会是"one step ahead of the variable"。这可能比将衰减从 0.999
更改为 0.998
或类似的东西具有更小的影响。
刚刚创建了一个拉取请求来解决这个问题:https://github.com/tensorflow/models/pull/3946
我正在研究使用 cifar10 数据集训练 CNN 的 tensorflow 卷积神经网络教程的代码。源代码位于 Gihub and the document in Document 中。
我的问题具体是关于 cifar10.py
第 375-378 行中 ExponentialMovingAverage
(doc here) 的使用。这是
with tf.control_dependencies([apply_gradient_op, variables_averages_op]):
train_op = tf.no_op(name='train')
return train_op
这里,variables_averages_op
是一个更新所有影子变量的操作,apply_gradient_op
是一个将计算梯度应用于所有原始变量的操作(更新原始变量,a.k.a. 模型权重).
由于control_dependencies
不保证其传递参数的执行顺序,因此本例中apply_gradient_op
和variables_averages_op
的执行顺序是任意的,这进一步表明在 运行 和 train_op
上,我们最终可以先更新原始变量,然后更新相应的影子变量,或者在 原始变量之前更新影子变量。后一种我觉得不合理
根据ExponentialMovingAverage
(link上面的官方文档,影子变量的更新依赖于原始变量:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
原始变量的更新应该在阴影变量的更新之前,教程代码中不是这样。
谁能帮我解决这个问题?谢谢。
我相信你是对的。它看起来确实像是示例中的错误。这在实践中可能并不重要,因为变量更新和移动平均更新的顺序很可能是稳定的。就算是"wrong"单,最坏的情况下,你的均线也会是"one step ahead of the variable"。这可能比将衰减从 0.999
更改为 0.998
或类似的东西具有更小的影响。
刚刚创建了一个拉取请求来解决这个问题:https://github.com/tensorflow/models/pull/3946