重置tensorflow优化器

Ste*_*ven 7 python optimization tensorflow

我从一个保存的模型加载,我希望能够重置一个tensorflow优化器,如Adam Optimizer.理想情况如下:

sess.run([tf.initialize_variables(Adamopt)])
Run Code Online (Sandbox Code Playgroud)

要么

sess.run([Adamopt.reset])
Run Code Online (Sandbox Code Playgroud)

我试过寻找答案,但还没有找到任何办法.以下是我发现的不解决问题的方法:https: //github.com/tensorflow/tensorflow/issues/634

在TensorFlow中有没有办法初始化未初始化的变量?

Tensorflow:使用Adam优化器

我基本上只想要一种方法来重置Adam Optimizer中的"slot"变量.

谢谢

小智 6

这个问题也困扰了我一段时间。实际上,这很容易,您只需定义一个操作即可重置优化器的当前状态,该操作可以通过variables()方法获得,如下所示:

optimizer = tf.train.AdamOptimizer(0.1, name='Optimizer')
reset_optimizer_op = tf.variables_initializer(optimizer.variables())
Run Code Online (Sandbox Code Playgroud)

每当您需要重置优化器时,请运行:

sess.run(reset_optimizer_op)
Run Code Online (Sandbox Code Playgroud)

变量的官方解释:

编码优化程序当前状态的变量列表。在当前默认图形中包括优化器创建的插槽变量和其他全局变量。

例如,对于AdamOptimizer而言,只要beta1_power和beta2_power,您将获得所有可训练变量的第一和第二时刻(具有slot_name'm'和'v')。


小智 5

在 tensorflow 2.x 中,例如 Adam 优化器,您可以像这样重置它:

for var in optimizer.variables():
    var.assign(tf.zeros_like(var))
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 4

我发现的最简单的方法是为优化器提供自己的变量范围,然后运行

optimizer_scope = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
                                 "scope/prefix/for/optimizer")
sess.run(tf.initialize_variables(optimizer_scope))
Run Code Online (Sandbox Code Playgroud)

来自冻结重量的想法