【发布时间】:2021-03-13 00:53:01
【问题描述】:
在Mask R-CNN论文here中,优化器被描述为在MS COCO 2014/2015数据集上进行实例分割的训练(我相信这是数据集,如果有错误请纠正)
我们在 8 个 GPU 上进行训练(如此有效的 minibatch size 为 16) 进行 160k 次迭代,学习率为 0.02,在 120k 迭代时减少 10。我们 使用 0.0001 的权重衰减和 0.9 的动量。和 ResNeXt [45],我们在每个 GPU 上使用 1 个图像进行训练,并且相同 迭代次数,起始学习率为 0.01。
我正在尝试在 Pytorch 中为类似的应用程序编写优化器和学习率调度程序,以匹配此描述。
对于我拥有的优化器:
def get_Mask_RCNN_Optimizer(model, learning_rate=0.02):
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate, momentum=0.9, weight_decay=0.0001)
return optimizer
对于学习率调度器我有:
def get_MASK_RCNN_LR_Scheduler(optimizer, step_size):
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=step_size, gammma=0.1, verbose=True)
return scheduler
当作者说“减少 10”时,他们的意思是除以 10 吗?或者他们的字面意思是减 10,在这种情况下我们有一个负学习率,这看起来很奇怪/错误。任何见解都值得赞赏。
【问题讨论】:
-
它们的意思是“除以 10”。正如您自己指出的那样,在这种情况下,减去 10 是一个荒谬的操作。将学习按 2、5 或 10 等值划分在文献中非常常见。学习率越小,你的收敛越精确(但也越慢)。本文只减少 LR 一次,但是很多训练使用常规减少,比如每 N epoch 除以 10,或者当收敛停止时
-
@trialNerror 如果您将此作为答案发布,我会接受。
标签: pytorch