我从保存的模型加载,我希望能够重置一个张量流优化器,如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中的变量。
由于
答案 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))
的想法
答案 2 :(得分:2)
在tensorflow 2.x中,例如Adam优化器,您可以像这样重置它:
for var in optimizer.variables():
var.assign(tf.zeros_like(var))