评估CNN培训情况的最佳指标是什么?验证错误或培训损失?

时间:2017-11-14 10:28:36

标签: validation tensorflow neural-network deep-learning keras

我想训练CNN,但我想使用所有数据来训练网络,从而不执行验证。这是一个不错的选择吗?如果只使用训练损失作为早期停止CNN的标准,我是否愿意过度装备我的CNN?

换句话说,什么是最好的'监视器'在下面的选项中,KERAS中的参数(例如)用于提前停止?

early_stopper=EarlyStopping(monitor='train_loss', min_delta=0.0001, patience=20)
early_stopper=EarlyStopping(monitor='train_acc', min_delta=0.0001, patience=20)
early_stopper=EarlyStopping(monitor='val_loss', min_delta=0.0001, patience=20)
early_stopper=EarlyStopping(monitor='val_acc', min_delta=0.0001, patience=20) 

在stackoverflow Keras: Validation error is a good measure for stopping criteria or validation accuracy?中有这样的讨论,但是,他们只讨论验证。是否更好地使用验证或训练数据中的标准来提前停止CNN培训?

2 个答案:

答案 0 :(得分:3)

我已经投票Tin Luu's回答,但想要提炼一个关键的,实用的观点:最佳标准是最符合 成功标准的标准。也就是说,必须在你的问题对我们完全有意义之前定义你的实用评分函数。

您对此模型进行培训的应用程序的重要性是什么?如果它只是前1个预测准确度,那么验证准确性(val_acc)几乎肯定是您唯一的标准。如果你关心自信心水平(例如,当你有48%的机会对猫进行套期保值时,42%它是一只狼,10%它是法拉利),那么正确实施错误功能将使验证错误(val_err)是一个更好的选择。

最后,我再次强调,根据您选择的标准,最终指标是实际性能。 Test数据是您实际输入的代表性样本。您可以使用早期停止标准来加快培训周转速度,但在您的实际标准经过测试和满足之前,您尚未做好部署准备。

答案 1 :(得分:2)

  
      
  1. 我想训练CNN,但我想使用所有数据来训练网络,从而不执行验证。这是一个不错的选择吗?我   如果仅使用训练损失,我冒着过度使用CNN的风险   提早停止CNN的标准?
  2.   

答案:不,你的目的是预测新样本,即使你有100%的训练准确率,但你可能对新样本的预测不好。你没办法检查你是否有过度拟合

  
      
  1. 换句话说,在下面的选项中,KERAS(例如)提前停止的最佳“监视器”参数是什么?
  2.   

答案:它应该是最接近现实的标准

early_stopper=EarlyStopping(monitor='val_acc', min_delta=0.0001, patience=20)

此外,您可能需要培训,验证和测试数据。训练是训练你的模型,验证是执行验证一些模型+参数并选择最佳,测试是独立验证你的结果(它不用于选择模型,参数,所以它相当于新样本)