【问题标题】:Tensorflow Object Detection: use Adam instead of RMSPropTensorflow 对象检测:使用 Adam 而不是 RMSProp
【发布时间】:2018-08-19 08:20:55
【问题描述】:

我正在用这个 [.config 文件][1] 训练一个 CNN:

rms_prop_optimizer: {
    learning_rate: {
      exponential_decay_learning_rate {
        initial_learning_rate: 0.004
        decay_steps: 800720
        decay_factor: 0.95
      }
    }
   momentum_optimizer_value: 0.9
   decay: 0.9
   epsilon: 1.0
}   

}
如您所见,有一个 rms_prop 作为优化器。如果我想使用 Adam 怎么办?我应该如何编辑这个文件?

【问题讨论】:

  • 请展示您关注的代码或行,并向我们展示有关此问题的更多详细信息。
  • @InfiniteLoops 没有代码。使用 Tensorflow 对象检测,您必须使用网络的所有详细信息配置管道:输入大小、小批量、梯度差异、学习率等。然后运行一个脚本 (legacy/train.py),该脚本将此 .config 作为输入文件。所以主要的部分是配置。我希望我已经足够清楚了。
  • 我的意思是,您可以直接复制并粘贴您所引用的行,而不是仅仅指向文件的链接,以便大家看到。因为你的问题看起来太短了。
  • 好的,我会编辑帖子

标签: tensorflow object-detection


【解决方案1】:

如果我是对的,您正在尝试将 object_detection 模型与 Tensorflow 提供的预训练网络一起使用,对吗? 然后,如果你懂一点编程,你可以看一下models/research/object_detection/builders/optimizer_builder.py,看看哪些是可以使用的优化器以及哪些参数。 相反,如果您只想要一个开箱即用的解决方案,我就是这样做的:

optimizer {
    # momentum_optimizer {
    adam_optimizer: {
      learning_rate: {
        manual_step_learning_rate {
          initial_learning_rate: .0002
          schedule {
            step: 4500
            learning_rate: .0001
          }
          schedule {
            step: 7000
            learning_rate: .00008
          }
          schedule {
            step: 10000
            learning_rate: .00004
          }
        }
      }
      # momentum_optimizer_value: 0.9
    }
    use_moving_average: false
  }

在我的(少量)经验中,我注意到使用与 momentum_optimizer 相同的 learning_experience 会使学习速度过快和/或带来 NaN 损失,因此我通常将其减少 10 倍或更多。我现在正在尝试。 :)

【讨论】:

  • 非常感谢乔瓦尼的回答。我成功地使用 adam 优化器进行了新的培训,作为一名程序员,我很高兴我终于了解了 optimizer_builder.py 的工作原理:-)
  • 您好,我尝试使用 Adam 优化器,但出现此错误:Key Conv/biases/Adam not found in checkpoint [[node save/RestoreV2 (defined at /truong/object-detection-tf- api/models/research/object_detection/model_lib.py:490) ]]
  • 我认为您正在尝试恢复您已经尝试使用另一个优化器训练的模型。如果是这种情况,很遗憾,您无法在训练期间更改优化器 - 即使您正在恢复它。所以你应该用另一个优化器重新开始训练,看看它是否有效。
  • 但是我打算在我自己的数据集上使用预训练的更快的 rcnn,因为我遇到了一些关于 NaN 损失的错误,我决定将优化器更改为 Adam(以前是动量优化器)。我什至不能改变优化器? :(
  • 也许我理解的不好。如果你用动量训练你的网络,然后从你的一个检查点尝试继续使用另一个优化器,这是不可能的。尽管如果您使用另一个优化器“从头开始”进行微调(因此没有您已经调整过的检查点),那么它应该可以工作。你的案子是第一个还是第二个?
猜你喜欢
  • 2015-12-30
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多