CNN不平衡和小数据集

数据挖掘 深度学习 喀拉斯 阶级失衡
2022-02-21 12:46:17

我想用 CNN 做 5 个类的分类,但是其中 4 个类只有 16 到 60 张图像,而最后一个有 1300 多张。我知道 16 或 60 张图像是不够的,所以我想用迁移学习、微调和数据增强。但是,我有几个问题。

由于数据增强只能用于训练数据,因此我将只有很少的 4 个类别的图像用于验证集,这会不会有问题?

是否需要将其拆分为培训/验证/测试,或者培训/验证是否足够?

另一个问题是数据不平衡:由于每个类别中的图像数量之间存在如此差异,过采样或欠采样会是一个好的解决方案吗?

对于迁移学习和微调,我应该冻结所有卷积层还是只训练一个 FC 层?

1个回答

由于数据增强只能用于训练数据,因此我将只有很少的 4 个类别的图像用于验证集,这会不会有问题?

您可以首先对图像数据集执行数据增强,然后将其拆分为训练/测试或训练/测试/验证。只需确保测试拆分中存在的图像不包含在训练拆分中,反之亦然。看到这个

是否需要将其拆分为培训/验证/测试,或者培训/验证是否足够?

验证数据集特别用于微调模型的超参数,即用于超参数优化。如果您想简单地跳过该过程,只需进行两次拆分、训练和测试。看到这个

请参阅答案以了解测试和验证数据集之间的区别。

另一个问题是数据不平衡,每个类中的图像数量存在如此大的差异,过采样或欠采样会是一个好的解决方案吗?

我会鼓励你为特定的类增加图像,直到你得到一个接近平衡的数据集。

对于迁移学习和微调,我应该冻结所有卷积层还是只训练一个 FC 层?

作为一种常见的做法,您可以尝试解冻一些初始层(通常具有较少过滤器的层)。参考这个博客。更深的层有更多的过滤器并提取高级特征。