Keras«数据量小的强大图像分类»:培训与验证之间的差异

时间:2017-06-26 16:26:39

标签: image performance classification keras

我关注this post并首先使其适用于数据集«Cats vs dogs»。然后我用我自己的图像替换了这个集合,这些图像显示了一个对象的存在与该对象的缺失。我的数据集甚至小于the post中的数据集。我只有496个图像包含该对象用于训练,160个图像包含该对象用于验证。对于“缺席”类,我有大量样本(图像中没有该对象)。

到目前为止,我没有尝试class_weight来解决不平衡的数据问题。我只是随机选择496和160个没有该对象的图像进行训练和验证。基本上,我使用this post中的技术使用较小的数据集进行两类图像分类。因此,由于数据不足,我预计会有较差的表现。但实际问题是性能不会收敛,如图所示。

你能告诉我导致无条件的可能原因吗?我猜这个问题与我的数据集有关,因为该模型适用于“猫与狗”。但我不知道如何解决它。是否有任何好的技术可以使它收敛?

谢谢。

VGG model]

此性能图基于VGG16,将所有层保持为完全连接的层,并训练一个具有256个神经元的小型完全连接层。

enter image description here 此性能图也基于VGG16,但使用128个神经元而不是256个神经元。我也将epochs设置为80。

根据目前为止提供的建议,我正在考虑使用定制的预测模型来解决过度拟合问题。但是怎么做呢?我担心的一个问题是,层数较少的模型会降低培训性能。任何为小数据定制好模型的指南?谢谢。

更新

现在我想我知道导致无法解决的问题的一半原因。你知道,其实我只有100多张图片。其余图像从Flickr下载。我认为那些具有中心物体和更好质量的图像将适用于​​该模型。但后来我发现它们无法提高准确性,甚至更糟糕的输出类概率。删除这些下载的图像后,性能上升了一点,并且隐藏性消失了。注意我只使用64 * 2图像进行训练,使用48 * 2图像进行测试。此外,我发现图像增强无法改善我的数据集的性能。如果没有图像增强,训练精度可达到1.但如果我添加一些图像增强,训练精度仅为85%左右。有人有过这样的经历吗?为什么数据扩充始终不起作用?因为我们的特定数据集?非常感谢你。

1 个答案:

答案 0 :(得分:1)

你的模型运作良好,但它“过度拟合”。这意味着它能够记住您的所有训练数据,而无需“思考”。这导致了很好的训练结果和糟糕的测试结果。

避免过度拟合的常用方法是:

  • 更多数据 - 如果您的数据很少,则过度拟合的可能性会增加
  • 减少单位/层数 - 使模型能力降低,因此它将停止记忆并开始思考。
  • 向图层添加“丢失”(随机丢弃部分结果以防止模型过于强大)

更多层意味着更多功能和性能吗?

如果按性能表示你的学习能力,是的。 (如果你的意思是“速度”,不)

是的,更多层意味着更多的力量。但过多的动力导致过度拟合:该模型能够记忆训练数据。

所以有一个最佳点:

  • 一个功能不强的模型不能给你正确的结果(训练和测试结果都不好)
  • 功能太强的模型会记住训练数据(优秀的训练结果,但测试结果不好)
  • 平衡模型将学习正确的事情(良好的培训和测试结果)

这正是我们使用测试数据的原因,它是未提供用于培训的数据,因此模型不会从测试数据中学习。