2017-05-08 140 views
1

在培训深度学习网络时(例如使用TensorFlow或类似方法),通常需要对固定样本集进行训练,并希望通过较长时间的训练可以获得更好的结果。但是,这假定单调递增的准确性,如下所示,显然不是真实的。如下所示,停在“2.0”的时候会有10个百分点更高的准确性。有没有通用的程序来选择更好的模型并保存它们。 换句话说,一个峰值检测程序。也许,在整个训练过程中跟踪测试精度,并在精度高于以前的值时节省模型(检查点?)。
问题:Tensorflow:从培训课程中选择最佳模型

  1. 什么是挑选最佳模型的最佳做法?
  2. TF有没有办法呢?
  3. 根据优化器最终会找到更好的解决方案的理论,继续培训更长时间(也许更长)是否有优点?
  4. 检查点是最佳的保存方法吗?

谢谢。 Original graph

编辑:由于从@Wontonimo的建议,改善的准确度的结果如下所示。以下改变:

  • 减少在从0.003亚当优化学习率至0.001
  • 从完整的数据集添加两个附加漏失层(概率= 0.5)
  • 洗牌选择训练帧(而不是序列选择)
  • 将训练迭代次数增加50%。

有了这些改变,似乎继续进一步培训将是有利的。并可能添加更多正则化。

New training graph

回答

1

这凸显了在机器学习

  • 1 2个常见问题:学习速率不稳定
  • 2:过于乐观

学习速率不稳定 首先让我们来谈谈学习速度不稳定。你的图表的错误率突然出现改善,就好像神经网络看到了一些使其以前的经验无效的数据,它对爆发的问题有了充分的了解。如果我们考虑培养一个动物或一个人,如果我们让下一个培训班的结果变得太重要而不是长远看待,就会发生这种情况。业内人士谈论学习速度衰退,这与“一旦你有基本的了解,对你的心智模式做出微小的改变”类似。

具体来说,考虑降低你的学习率1/2或1/3。另外尝试使用更强大的学习算法。如果您正在使用梯度下降,则尝试使用基于动量的梯度下降。最后,如果你看到这些大幅下降的测试精度,再次降低你的学习速度1/2或1/3。如果你在最后一层没有使用像正常人那样的正规化者,那也可以帮助你保持训练结果与你的测试结果密切相关,这样你就不会过度训练。

过分乐观 您提到过,如果您有良好的结果,您想停止培训。你忽略了你的模型实际上并没有收敛。忽略不良结果对模型过于乐观。

我认为你的模型显示出巨大的承诺,如果它能够达到0.8。像monumentum和辍学等小变化将稳定您的结果。

更新时间:Minibatch 后您的旧图形和新的图形多审查,并考虑到的意见,看来,你可以降低噪音大大通过使用更大的minibatch。考虑将您的批量增加x10。您的图表看起来很像SGD,或者批量大小足够小,以获得类似的结果。在发送给亚当以获得收益之前,将批次结果的损失函数平均化很重要。如果你这样做,你可能不得不跑到10倍的时代,但你会看到更平滑的图。

+0

谢谢你的评论。在我们的例子中,我们使用了Adam优化器,我相信它会自动实现学习速率衰减。但显然这还不够。关于正规化,我们正在使用一个辍学层,但您的意见表明第二个不会是一件坏事。 – Hephaestus

+0

但是,原始问题似乎仍然有用。我应该推断一个设计良好的训练系统是单调的,不需要峰值检测? – Hephaestus

+0

我会说是的,一个设计良好的系统**趋向于单调行为。但是,无需在不必要的工作上刻录CPU,因此检测到高原的某些内容对退出和排列下一份工作很有用。 – Wontonimo

0

我认为在这种情况下,最好是从不同的角度可能选择另一种模式解决这个问题。对我来说,这个精度图看起来非常嘈杂,真的是随机的。