Python 什么';tf.train.ExponentialMovingAverage和tf.train.MomentumOptimizer之间的区别是什么?
我看到文档tf.train.ExponentialMovingAverage实现了以下公式:Python 什么';tf.train.ExponentialMovingAverage和tf.train.MomentumOptimizer之间的区别是什么?,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我看到文档tf.train.ExponentialMovingAverage实现了以下公式: shadow_variable = decay * shadow_variable + (1 - decay) * variable 我没有找到tf.train.MomentumOptimizer的公式。但我认为可能是: v = γ*v - learning_rate*dx θ = θ - v 我觉得这两个功能有相似的效果,可以互相交换吗?或者有不同的应用场景?还是我完全错了 shadow_变量是否
shadow_variable = decay * shadow_variable + (1 - decay) * variable
我没有找到tf.train.MomentumOptimizer的公式。但我认为可能是:
v = γ*v - learning_rate*dx
θ = θ - v
我觉得这两个功能有相似的效果,可以互相交换吗?或者有不同的应用场景?还是我完全错了
shadow_变量是否等于θ
谢谢你的指导。你完全错了
tf.train.ExponentialMovingAverage
实现了仅指数移动平均值:shadow\u变量
是当前时间步长的移动平均值,它使用您发布的公式进行更新。
每次执行包含移动平均值的节点时,所发生的就是执行该公式
相反,tf.train.MomentumOptimizer
是一个更加复杂的对象。
简言之,它实现了一种称为动量梯度下降的参数更新算法,该算法计算模型参数的梯度,并使用计算的梯度+在训练步骤中累积的动量项执行每个网络参数的更新步骤
动量项当然是梯度的移动平均值。但是这两个函数执行不同的操作,目标也不同。你完全错了
tf.train.ExponentialMovingAverage
实现了仅指数移动平均值:shadow\u变量
是当前时间步长的移动平均值,它使用您发布的公式进行更新。
每次执行包含移动平均值的节点时,所发生的就是执行该公式
相反,tf.train.MomentumOptimizer
是一个更加复杂的对象。
简言之,它实现了一种称为动量梯度下降的参数更新算法,该算法计算模型参数的梯度,并使用计算的梯度+在训练步骤中累积的动量项执行每个网络参数的更新步骤
动量项当然是梯度的移动平均值。但这两个函数执行不同的操作,目标也不同。感谢您的指导。^ u^我现在明白了。我还有一个问题。当我们使用tf.train.ExponentialMovingAverage.apply(var)来维护变量的移动平均值时,如果我们更新一个变量,如use tf.assign,以获得衰减变量,我们将使用tf.train.ExponentialMovingAverage.average(var),但是如果我们直接通过tf.Session.run(var)获得变量,我们将获得不衰减的变量。那么,当我们训练一个具有指数移动平均值的神经网络时,模型是否使用tf.train.ExponentialMovingAverage.average()默认值的衰减变量?你应该为此提出另一个问题:DOk,谢谢你的提醒,我现在提出另一个问题^谢谢你的指导。^我现在明白了。我还有一个问题。当我们使用tf.train.ExponentialMovingAverage.apply(var)来维护变量的移动平均值时,如果我们更新一个变量,如use tf.assign,以获得衰减变量,我们将使用tf.train.ExponentialMovingAverage.average(var),但是如果我们直接通过tf.Session.run(var)获得变量,我们将获得不衰减的变量。那么,当我们训练一个具有指数移动平均值的神经网络时,模型是否使用了tf.train.ExponentialMovingAverage.average()默认值的衰减变量?你应该为此打开另一个问题:DOk,谢谢你的提醒,我现在打开了另一个问题^_^