强制每个 Keras 批次包含每个类别中的至少一个图像是不好的做法吗?

Posted

技术标签:

【中文标题】强制每个 Keras 批次包含每个类别中的至少一个图像是不好的做法吗?【英文标题】:Is it bad practice to force each Keras batch to contain at least one image from each class? 【发布时间】:2020-11-04 21:45:38 【问题描述】:

我正在 Keras 中训练一个 U-Net CNN,其中一个图像类在训练数据集中的代表性明显不足。我正在使用类加权损失函数来解决这个问题,但我担心的是,由于批量大小和类实例如此之低,10 个批次中只有 1 个可能包含此类的图像。因此,即使该类被加权,网络在训练期间也很少看到它。因此,强制数据生成器在为批处理选择随机数据片段时至少包含此类的一个实例是一种不好的做法吗?这样我就可以避免大多数训练无法访问对整体任务准确性至关重要的一类数据的情况。

【问题讨论】:

您是否使用包含一系列命令的文本文件,这些命令由 MS-DOS、IBM OS/2 或 Microsoft Windows 系统上的命令解释器执行。请阅读您的每个链接的摘要,并在向其他人发送垃圾邮件之前验证它们是否与您的问题相关。 [batch-file] 标签已移除。 不。绝对不是。 是的,谢谢,很明显标签是错误的,抱歉... 不。当然不。 (如果您的数据集是平衡的)。既然你说你的数据集不平衡,我建议增加不平衡类的数据 【参考方案1】:

我会推荐三种可能的技术来处理这种问题:

统一获取给定类图像的概率:例如this 用于Pytorch(不知道您使用的是哪种技术,请提供)。 (简单,但效率最低) 通过给欠平衡类更多的权重来调整损失(也很容易,将给出与以前的方法相同的结果,首先考虑两种最容易实现的方法) 做一些数据增强(更难,但现在很多库都提供了有效的方法来做到这一点)

编辑:抱歉,没有看到 Keras。一些有用的链接:data augmentation、class balancing 和 loss adaptation

【讨论】:

以上是关于强制每个 Keras 批次包含每个类别中的至少一个图像是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Keras:为啥损失函数必须为每个批次项目返回一个标量,而不仅仅是一个标量?

在 Keras 中实现批次相关的损失

如何管理大型神经网络的数据批次?

连接 Keras 中的屏蔽输入

Keras多实例分类问题

使用生成器从批量的.npy文件中训练Keras模型?