Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';tf.train.ExponentialMovingAverage和tf.train.MomentumOptimizer之间的区别是什么?_Python_Tensorflow_Machine Learning - Fatal编程技术网

Python 什么';tf.train.ExponentialMovingAverage和tf.train.MomentumOptimizer之间的区别是什么?

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_变量是否

我看到文档tf.train.ExponentialMovingAverage实现了以下公式:

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,谢谢你的提醒,我现在打开了另一个问题^_^