python - 如何在 Keras 神经网络中获得训练和开发错误?
问题描述
为了了解我的模型是过拟合还是欠拟合,我应该如何获取这些值?例如,当train_error= 0.1
和时dev_error=0.25
,模型过拟合是可以理解的。但我不知道我的模型提供的哪些结果表明了上述错误。损失值是表示该度量还是(1-准确度)度量?
这是我的模型训练结果的一部分:
Epoch 152/250
100253/100253 [==============================] - 12s 118us/step - loss:
0.5306 - acc: 0.8568 - val_loss: 1.1438 - val_acc: 0.7550
解决方案
术语错误和损失是同义词
Keras 将训练损失(分别为准确率)表示为
loss
(acc
);验证损失和准确性分别表示为val_loss
和val_acc
。train_error= 0.1
anddev_error=0.25
, orloss: 0.5306
andval_loss: 1.1438
在这里,并不表示过拟合;这只是泛化差距,即训练集和验证集之间性能的预期差距。引用Google AI 最近的一篇博文:理解泛化的一个重要概念是泛化差距,即模型在训练数据上的性能与其在从同一分布中提取的不可见数据上的性能之间的差异。
过度拟合的明显特征是当您的验证损失开始增加,而您的训练损失继续减少时,即:
注意上图中曲线之间的间隙(双关语)(改编自维基百科关于过度拟合的条目)。
根据上下文,人们可能更喜欢监控指标而不是下面评论中正确指出的损失,但这是另一个讨论 - 希望你在这里得到这个想法......
推荐阅读
- javascript - 计算遗漏项目后向 JSON 对象添加新数组
- php - 如何在 Nginx 的重写规则中包含所有 php 文件?
- spring - 为什么 Spring 程序在 freemarker 模板中不显示图像?
- c# - 如何在 OnCurrentPageChanged 方法中设置 TabbedPage 的 CurrentPage 属性?
- powershell - 来自 MDM 上用户的电子邮件 Bitlocker 状态
- java - Spring Batch - 为什么在 Web 上下文而不是 Job 上下文中创建/执行作业 Step bean?
- javascript - 未定义的变量...但以前定义为 const 没问题
- erlang - 一个接受字符串并为您提供由空格分隔的第一个单词的函数?
- python - 给定一个 aws-lambda,如何使用 boto3 更改与之关联的 cloudwatch 规则?
- python - PyDICOM 无法读取像素数据,需要 GDCM 或 Pillow