CNN训练中的最佳体重更新

时间:2018-08-30 12:40:18

标签: tensorflow deep-learning conv-neural-network caffe

我有两个网络。 D->C1,R1->P1->C2,R2->loss and D->C1,R1,C2,R2->P1->C3,R3->loss

D是数据,C是Conv,R是Relu,P是Pool。

我从头开始训练第一个网络,由于两个网络只有C2,R2层不同,所以我使用了第一个网络的所有权重,仅训练了C2。 C1和C3设置为lr_mult = 0,因此它们的权重不会更新。

我的询问是如何知道C2具有最佳的重量来停止训练。

说网络1在5个周期后的mAP = 0.85。当我训练网络2时,在1个时间段之后,它的mAP = 0.86。

在这种情况下我什么时候应该停止训练?

1 个答案:

答案 0 :(得分:1)

不幸的是,神经网络优化通常是is non-convex,因此无法知道特定的局部最小值是否是全局最小值[*]具有预先训练的权重的事实并不特别相关[**] 。 solver has an effect

的类型

也就是说,有些标准偶尔会启发式地使用。重要的是:use a testing set, not a training set用于评估(然后在检查性能时使用单独的验证集)。

  1. 测试集板块上MSE的变化
  2. 交叉鉴定[***]
  3. 学习率消失(depends on your solver
  4. 固定的迭代次数

这里是slightly older survey,尽管结果往往总是凭经验得出的


此外,Goodfellow提出以下重要建议,以确保无论您使用何种标准,参数都应尽可能最佳:

  

每次验证集的错误改善时,我们都会存储一个副本   模型参数。当训练算法终止时,我们   返回这些参数,而不是最新参数。的   当没有参数达到最佳状态时,算法终止   记录了某些预定迭代次数的验证错误



脚注

[*]还有其他条件(e.g)可能会提供此信息,但都不适用

[**]我不知道有这种或另一种方式的研究,但我怀疑这实际上会使问题更困难,因为您是从一个漂亮的家伙开始的良好的局部最小值,可能很难爬出来

[***]这与使用交叉验证来测量测试集或模型选择的准确性不同,请参阅here