【问题标题】: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 中的“槽”变量。

谢谢

【问题讨论】:

    标签: python optimization tensorflow


    【解决方案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 然后更新了答案。同时还有这个可能会有所帮助stackoverflow.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 的回答 stackoverflow.com/questions/41533489/…
    • 这里也一样。 variable_initializer 不够用
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多