【问题标题】:Tensorflow Adam Optimizer state not updating ( get_config )TensorFlow Adam Optimizer 状态未更新( get_config )
【发布时间】:2021-01-29 18:53:41
【问题描述】:

我使用optimizer.get_config() 来获取我的亚当优化器的最终状态(如https://stackoverflow.com/a/60077159/607528)但是.get_config() 正在返回初始状态。我认为这意味着以下之一

  1. .get_config() 应该返回初始状态
  2. 我的优化器没有更新,因为我设置错误
  3. 我的优化器未更新 tf 的 adam 已损坏(极不可能)
  4. 我的优化器正在更新,但在我调用 .get_config() 之前正在某个地方重置
  5. 还有别的吗?

当然,我最初在一个包含训练和验证集等的适当项目中注意到了这个问题,但这里有一个非常简单的 sn-p,它似乎重现了这个问题:

import tensorflow as tf
import numpy as np

x=np.random.rand(100)
y=(x*3).round()

model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x, y, epochs=500)
model.evaluate(x, y)

model.optimizer.get_config()

【问题讨论】:

  • 你到底把什么叫做状态?如果你的意思是跑步的意思,那么你的方法是错误的。
  • @Dr.Snoopy 是的 - 我希望能够以或多或少相同的 lr/momentum 重新开始训练

标签: tensorflow keras tensorflow2.0 adam


【解决方案1】:

如果您想恢复训练 - 您应该保存优化器权重,而不是配置:

    weight_values = optimizer.get_weights()
    with open(self.output_path+'optimizer.pkl', 'wb') as f:
        pickle.dump(weight_values, f)

然后加载它们:

    model.fit(dummy_x, dummy_y, epochs=500) # build optimizer by fitting model with dummy input - e.g. random tensors with simpliest shape
    with open(self.path_to_saved_model+'optimizer.pkl', 'rb') as f:
        weight_values = pickle.load(f)
    optimizer.set_weights(weight_values)

【讨论】:

  • 谢谢@andrey:这个答案非常正确,我在测试之前接受了这个。可悲的是,我是它导致我遇到了一个新问题ValueError: You called set_weights(weights) on optimizer Adam with a weight list of length 255, but the optimizer was expecting 0 weights.stackoverflow.com/a/49504376/607528 之后我尝试调用_make_train_function,它在 TF2.3 中不存在 - 但是make_train_function 确实存在。但是model.make_train_function(); model.optimizer.set_weights(weight_values) 仍然不能解决问题。想法?
  • @brook 你必须在加载权重之前构建优化器 - 查看更新的答案
猜你喜欢
  • 2021-10-04
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2019-10-18
  • 2015-06-11
  • 2017-05-20
  • 1970-01-01
相关资源
最近更新 更多