我正在尝试使用Keras进行二进制分类问题,使用该ImageDataGenerator.flow_from_directory
方法生成批处理.但是,我的类非常不平衡,比如在一个类中比另一个类大约多8倍或9倍,导致模型卡住为每个示例预测相同的输出类.有没有办法在flow_from_directory
我的小班上设置过采样,或者在每个纪元期间从我的大班中设置欠采样?现在,我刚刚在我的小班级中创建了每个图像的多个副本,但我希望有更多的灵活性.
使用当前版本的Keras - 仅使用Keras内置方法无法平衡数据集.该flow_from_directory
简直是建设的所有文件和自己的班级名单,洗牌(如果需要),然后它遍历它.
但是你可以做一个不同的技巧 - 通过编写你自己的生成器来实现平衡python
:
def balanced_flow_from_directory(flow_from_directory, options): for x, y in flow_from_directory: yield custom_balance(x, y, options)
这里custom_balance
应该是一个函数,给定批处理(x, y)
是平衡它并返回平衡批处理(x', y')
.对于大多数应用程序,批处理的大小不需要相同 - 但是有一些奇怪的用例(例如有状态的 RNN) - 批处理大小应该具有固定的大小).