重置tensorflow优化器



我正在从保存的模型加载,我希望能够重置tensorflow优化器,如Adam优化器。最理想的是:

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

sess.run([Adamopt.reset])

我试着寻找一个答案,但还没有找到任何方法去做。以下是我发现的没有解决这个问题的方法:https://github.com/tensorflow/tensorflow/issues/634

在TensorFlow中是否有任何方法可以初始化未初始化的变量?

Tensorflow: Using Adam optimizer

我基本上只是想要一种在亚当优化器中重置"slot"变量的方法。

谢谢

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

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

这个问题也困扰了我很久。其实很简单,你只需要定义一个操作来重置优化器的当前状态,这个操作可以通过variables()方法获得,就像这样:

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

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

sess.run(reset_optimizer_op)

变量的官方解释():

对Optimizer的当前状态进行编码的变量列表。包括槽变量和优化器在当前默认图中创建的其他全局变量。

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

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

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

idea from freeze weights

基于@EdisonLeejt对Tensorflow 2的答案。X,更一般地,你可以先获得初始状态(可能不是零,例如,如果从检查点文件加载),然后分配它,即

#Get initial states
init_states = [var.value() for var in optimizer.variables()]
#Do the optimization
...
#reset optimizer state to init_state
for val,var in zip(init_states,optimizer.variables()): var.assign(val)

最新更新