machine-learning - 关于CNN训练的一些简单问题

标签 machine-learning neural-network conv-neural-network

我读到,使用 CNN 时,每个类的样本数量应该大致相等。我正在进行二元分类,从背景中检测行人,因此这两个类别是行人和背景(实际上不是行人的任何东西)。

如果我将硬负挖掘纳入我的训练中,如果我得到很多误报,我最终会得到比正样本更多的负样本。

1)这样可以吗?

2)如果没有,我该如何解决这个问题?

3)使用负样本多于正样本来训练 CNN 会产生什么后果?

4)如果负样本多于正样本是可以的,是否有一个我不应超过的最大限制?就像例如。我的负样本不应比正样本多 3 倍。

5) 我可以通过抖动来增加我的正样本,但是我应该为每个图像创建多少额外样本?有‘太多’吗?比如,如果我一开始有 2000 个阳性样本,那么额外添加多少样本就太多了?通过抖动从 2k 样本生成总共 100k 样本是否过多?

最佳答案

这取决于您使用哪个成本函数,但如果您将其设置为 log_loss 那么我可以向您展示不平衡的数据集如何直观地损害您的训练以及此问题的可能解决方案是什么:

a.如果你不改变类的分布并让它们不平衡 - 如果你的模型能够实现相对较小的损失函数值,那么它不仅会成为图像上行人的良好检测器,而且还会了解行人检测是一种相对罕见的事件,它可以防止您出现很多误报。因此,如果您能够花更多的时间来训练更大的模型 - 它可能会给您带来非常好的结果。

b.如果你改变你的类的分布 - 那么你可能可以在更短的时间内用更小的模型获得相对好的结果 - 但另一方面 - 因为你的分类器将学习不同的分布 - 你可能会得到很多 False积极的一面。

但是 - 如果您的分类器的训练阶段持续时间不是太长 - 您可能会在这两种方法之间找到一个很好的折衷方案。您可以设置一个乘法因子(例如,如果您将样本数量增加 2、3 或 n 倍)作为元参数并优化它的值,例如使用网格搜索模式。

关于machine-learning - 关于CNN训练的一些简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189801/

相关文章:

algorithm - 如何将多种措施合并为一项措施

python - 如何处理分类数据以在机器学习中进行预处理

python - 修改Keras中的图层参数

machine-learning - tensorflow 可扩展性

artificial-intelligence - 卷积神经网络中权重和输出的值

tensorflow - 如何获得可重现的结果(Keras、Tensorflow):

python - 关于多个 tf.layer.conv2d 如何相互连接

machine-learning - 卷积核是预定义的还是 CNN 在训练期间定义它们

machine-learning - 我应该在时期内针对错误分类的样本调整损失权重吗?

machine-learning - 为什么sklearn DecisionTreeClassifier的决策树结构只是二叉树?