关于何时停止训练 resnet50 网络的建议(AWS 上的 mxnet)

Advice on when to stop training a resnet50 network (mxnet on aws)

我有一个包含大约 2 万张图像的自定义数据集(10% 用于验证)。 我有大约 1/3 的标签 class 0,1/3 的标签 class 1,还有 1/3 没有 class 0,或者 1 个带有 -1 标签的对象.

我有 运行 大约 400 个 epoch,最后 40 个 epoch 验证 mAP 从 0.817 增加到 0.831,训练交叉熵损失从 0.377->0.356

the last epoch had validation mAP <score>=(0.83138943309)
train cross_entropy <loss>=(0.356147519184)
train smooth_l1 <loss>=(0.150637295831)
  1. 训练损失似乎仍然可以合理减少,但我对 resnet 没有任何经验(在 yolov3 上,该数据集很快低于 .1)

  2. 我让 1/3 的训练图像都没有 class 的方法是否合理?当我在做yolov3训练时,它似乎可以帮助网络避免误报。

  3. 有什么经验法则可以帮助我根据 classes/images 的数量估计多少个 epoch 是合适的?

  4. 为了达到这一点,我在 aws 上花费了大约 100 美元,我不确定是否需要另外 100 美元或 1000 美元才能达到最佳 mAP - 按照目前的速度似乎 1 小时改善了大约 1%——我希望这种情况会放缓。

  5. 我应该查看其他指标吗? (如果是这样,我该如何导出它们)?

  6. 是否有任何超参数我应该更改并恢复训练?

我的超参数是:

base_network='resnet-50',
num_classes=2,
mini_batch_size=32,
epochs=200,
learning_rate=0.001,
lr_scheduler_step='3,6',
lr_scheduler_factor=0.1,
optimizer='sgd',
momentum=0.9,
weight_decay=0.0005,
overlap_threshold=0.5,
nms_threshold=0.45,
image_shape=416,
label_width=480,
num_training_samples=19732)

谢谢, 约翰

很难提前确定自定义数据集的时间,因为您要处理许多不同的变量。跟踪验证 mAP 当然是告诉您何时停止的好方法。例如,mAP stops increasing,或 mAP 正在趋于平稳。

因此,除此之外,我建议查看其他使用相同架构和相似参数的人以获得洞察力。您提到了一个自定义数据集,但对于 ImageNet,DAWNBench 发布了该信息。例如,this page 列出了每个时期的超参数,供您探索相关设置。

我还建议您查看微调预训练模型以节省资金和计算量。查看愿景部分 hereherehttps://github.com/apache/incubator-mxnet/issues/4616 有关微调 FC 层的信息。