gpt4 book ai didi

python - 如何在 Keras 中使用 fit_generator() 平衡数据集?

转载 作者:行者123 更新时间:2023-12-03 17:10:31 25 4
gpt4 key购买 nike

我正在尝试使用 keras 来拟合 CNN 模型来对 2 类数据进行分类。我有不平衡的数据集我想平衡数据。我不知道我可以在 model.fit_generator 中使用 class_weight .我不知道我是否使用过class_weight="balanced"model.fit_generator 主码 :

def generate_arrays_for_training(indexPat, paths, start=0, end=100):      
while True:
from_=int(len(paths)/100*start)
to_=int(len(paths)/100*end)
for i in range(from_, int(to_)):
f=paths[i]
x = np.load(PathSpectogramFolder+f)
x = np.expand_dims(x, axis=0)

if('P' in f):
y = np.repeat([[0,1]],x.shape[0], axis=0)
else:
y =np.repeat([[1,0]],x.shape[0], axis=0)
yield(x,y)
history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75),
validation_data=generate_arrays_for_training(indexPat, filesPath, start=75),
steps_per_epoch=int((len(filesPath)-int(len(filesPath)/100*25))),
validation_steps=int((len(filesPath)-int(len(filesPath)/100*75))),
verbose=2,
epochs=15, max_queue_size=2, shuffle=True, callbacks=[callback])

最佳答案

如果你不想改变你的数据创建过程,你可以使用 class_weight在您的拟合生成器中。您可以使用字典来设置您的 class_weight 并通过微调进行观察。例如,当不使用 class_weight 时,class0 有 50 个示例,class1 有 100 个示例。然后,损失函数统一计算损失。这意味着 class1 将是一个问题。但是,当您设置:

class_weight = {0:2 , 1:1}
这意味着损失函数现在将为您的 0 类赋予 2 倍的权重。因此,对代表性不足的数据进行错误分类将需要比以前多 2 倍的惩罚。因此,模型可以处理不平衡的数据。
如果您使用 class_weight='balanced'模型可以自动进行该设置。但我的建议是,创建一个像 class_weight = {0:a1 , 1:a2} 这样的字典。并为 a1 和 a2 尝试不同的值,以便您了解差异。
此外,您可以对不平衡数据使用欠采样方法,而不是使用 class_weight。查询 引导 为此目的的方法。

关于python - 如何在 Keras 中使用 fit_generator() 平衡数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64141816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com