Tensorflow 培训期间如何在Keras中使用optimizers.SGD的get_updates()?

Tensorflow 培训期间如何在Keras中使用optimizers.SGD的get_updates()?,tensorflow,keras,Tensorflow,Keras,我不熟悉Keras的内部工作原理,很难理解Keras在培训期间如何使用optimizers.SGD的get_updates()功能 我在网上搜索了很长时间,但只得到了很少的细节。具体来说,我的理解是SGD的参数/权重更新规则是在get\u updates()函数中定义的。但似乎在培训期间的每次迭代中都不会调用get_updates();否则“时刻”将无法从一个迭代传递到下一个迭代以正确实现动量,因为每次调用都会重置动量,c.f.optimizers.py: shapes=[K.get_varia

我不熟悉Keras的内部工作原理,很难理解Keras在培训期间如何使用optimizers.SGD的
get_updates()
功能

我在网上搜索了很长时间,但只得到了很少的细节。具体来说,我的理解是SGD的参数/权重更新规则是在
get\u updates()
函数中定义的。但似乎在培训期间的每次迭代中都不会调用
get_updates()
;否则“时刻”将无法从一个迭代传递到下一个迭代以正确实现动量,因为每次调用都会重置动量,c.f.optimizers.py:

shapes=[K.get_variable_shape(p)表示参数中的p]
矩=[K.零(形状)表示形状中的形状]
self.weights=[self.iterations]+时刻
对于拉链中的p、g、m(参数、梯度、力矩):
v=自动量*m-lr*g#速度
self.updates.append(K.update(m,v))
正如中指出的,get_updates()仅定义“符号计算图”。我不知道那是什么意思。有人能更详细地解释一下它是如何工作的吗

例如,如何将一次迭代中计算的“v”传递给下一次迭代中的“矩”以实现动量?如果有人能给我指一些关于如何工作的教程,我也会很感激

非常感谢!(顺便说一句,如果有必要,我使用的是tensorflow。)

get_updates()定义了更新渐变的图形操作。 当对图形进行培训评估时,它会以某种方式如下所示:

  • 前向过程计算预测值
  • 损失计算成本
  • 反向过程计算梯度
  • 渐变将被更新
更新梯度本身就是一个图形计算;i、 您引用的代码片段通过指定涉及哪些张量以及发生哪些数学运算来定义如何执行该运算。此时数学运算本身不会发生

矩是上面代码中定义的张量向量。该代码创建一个更新每个元素的图形操作

图形的每次迭代都将运行此更新操作

以下链接试图解释TensorFlow中计算图的概念:


Keras使用了相同的基本思想,但将用户从处理低级细节中抽象出来。在传统的TensorFlow 1.0 API中定义模型需要更高层次的细节。

非常感谢您的回答!但我还是有点困惑。我假设上面的最后两行代码定义了“时刻”是如何更新的,并且它们在图形的每次迭代中都被执行。代码片段的前两行呢?我想它们不是在每次迭代中都执行的。所以,更一般地说,我如何判断在每次迭代中执行get_updates()函数的哪些行?是否有一般规则?您引用的代码段在创建图形时执行。调用model.fit()时,将执行图形。建议:使用TensorBoard回调生成图形的表示形式。计算图由一组关于张量的操作组成。
self.updates.append(…)
上面的一行添加了一组操作,这些操作将由图在每个历元执行。非常感谢您的澄清/建议。我真的很感激!