重置tensorflow优化器

时间:2016-09-21 04:28:23

标签: python optimization tensorflow

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

sess.run([tf.initialize_variables(Adamopt)])

sess.run([Adamopt.reset])

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

In TensorFlow is there any way to just initialize uninitialised variables?

Tensorflow: Using Adam optimizer

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

由于

3 个答案:

答案 0 :(得分:5)

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

optimizer = tf.train.AdamOptimizer(0.1, name='Optimizer')
reset_optimizer_op = tf.variables_initializer(optimizer.variables())

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

sess.run(reset_optimizer_op)

variables()的正式说明:

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

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

答案 1 :(得分:3)

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

optimizer_scope = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
                                 "scope/prefix/for/optimizer")
sess.run(tf.initialize_variables(optimizer_scope))

来自freeze weights

的想法

答案 2 :(得分:2)

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

for var in optimizer.variables():
    var.assign(tf.zeros_like(var))