Geo*_*rge 12 python machine-learning neural-network deep-learning keras
我正在尝试使用Keras进行二进制分类问题,使用该ImageDataGenerator.flow_from_directory
方法生成批处理.但是,我的类非常不平衡,比如在一个类中比另一个类大约多8倍或9倍,导致模型卡住为每个示例预测相同的输出类.有没有办法在flow_from_directory
我的小班上设置过采样,或者在每个纪元期间从我的大班中设置欠采样?现在,我刚刚在我的小班级中创建了每个图像的多个副本,但我希望有更多的灵活性.
Mar*_*jko 12
使用当前版本的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)
Run Code Online (Sandbox Code Playgroud)
这里custom_balance
应该是一个函数,给定批处理(x, y)
是平衡它并返回平衡批处理(x', y')
.对于大多数应用程序,批处理的大小不需要相同 - 但是有一些奇怪的用例(例如有状态的 RNN) - 批处理大小应该具有固定的大小).
小智 7
您可以做的一件事是class_weight
在调用model.fit()
或时设置参数model.fit_generator()
。
碰巧您还可以使用sklearn
和numpy
库轻松计算 class_weights ,如下所示:
from sklearn.utils import class_weight
import numpy as np
class_weights = class_weight.compute_class_weight(
'balanced',
np.unique(train_generator.classes),
train_generator.classes)
Run Code Online (Sandbox Code Playgroud)
之后,它变得就像设置您的class_weights
等于class_weight
参数一样简单:
model.fit_generator(..., class_weight=class_weights)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4292 次 |
最近记录: |