重置张量流优化器
Posted
技术标签:
【中文标题】重置张量流优化器【英文标题】:Reset tensorflow Optimizer 【发布时间】:2017-01-29 04:09:54 【问题描述】:我正在从保存的模型中加载,我希望能够重置 TensorFlow 优化器,例如 Adam 优化器。理想情况下是这样的:
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 中的“槽”变量。
谢谢
【问题讨论】:
【参考方案1】:我发现的最简单的方法是给优化器自己的变量范围,然后运行
optimizer_scope = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
"scope/prefix/for/optimizer")
sess.run(tf.initialize_variables(optimizer_scope))
来自freeze weights的想法
【讨论】:
这似乎不适用于 TensorFlow 1.0 中的 Adam。 我在 tf 0.10 中对其进行了测试,我将使用 tf 1.0 重新运行测试。错误是什么? 应该指定 - 它没有为 Adam 列出任何可训练的变量,范围似乎是空的。 我今天再看看。我自己安装了 1.0 然后更新了答案。同时还有这个可能会有所帮助***.com/questions/35164529/… 应该是 tf.GraphKeys.GLOBAL_VARIABLES 而不是 tf. GraphKeys.TRAINABLE_VARIABLES。我将编辑答案以修复它。【参考方案2】:这个问题也困扰了我好一阵子。其实很简单,你只需定义一个操作来重置优化器的当前状态,可以通过 variables() 方法获得,如下所示:
optimizer = tf.train.AdamOptimizer(0.1, name='Optimizer')
reset_optimizer_op = tf.variables_initializer(optimizer.variables())
当您需要重置优化器时,运行:
sess.run(reset_optimizer_op)
variables()官方解释:
编码优化器当前状态的变量列表。 在当前默认图中包括由优化器创建的槽变量和其他全局变量。
例如对于 AdamOptimizer,基本上你会得到所有可训练变量的第一个和第二个时刻(带有 slot_name 'm' 和 'v'),只要 beta1_power 和 beta2_power。
【讨论】:
不知道以下是否仍然正确。我听说在内部,AdamOptimizer 还跟踪它运行的步数。仅仅做tf.variables_initializer(optimizer.variables())
是不够的。请参阅 LucasB 的回答 ***.com/questions/41533489/…
这里也一样。 variable_initializer 不够用【参考方案3】:
在 tensorflow 2.x 中,例如 Adam 优化器,您可以像这样重置它:
for var in optimizer.variables():
var.assign(tf.zeros_like(var))
【讨论】:
以上是关于重置张量流优化器的主要内容,如果未能解决你的问题,请参考以下文章
Adam 优化器真的是 RMSprop 加动量吗?如果是,为啥它没有动量参数?
tf.train.MomentumOptimizer 优化器
Pytorch优化器全总结AdadeltaRMSpropAdamAdamaxAdamWNAdamSparseAdam(重置版)