python - 使用 class_weight 来平衡 data-.fit_generator()
问题描述
我有 2 个类的不平衡数据集。我正在使用categorical_crossentropy
. 我想知道我的代码。class_weight
与一起使用是否正确categorical_crossentropy
?如果是,是否class_weight
仅适用于训练集或整个数据?
我已经搜索了很多次,但我没有找到任何有用的网站。任何帮助,将不胜感激。
我的代码:
model.compile(loss='categorical_crossentropy', optimizer=opt_adam, metrics=['accuracy'])
history=model.fit_generator(generate_arrays_for_training(indexPat, train_data, start=0,end=100)
validation_data=generate_arrays_for_training(indexPat, test_data, start=0,end=100)
steps_per_epoch=int((len(train_data)/2)),
validation_steps=int((len(test_data)/2)),
verbose=2,class_weight = {0:1, 1:1.181},
epochs=65, max_queue_size=2, shuffle=True)
解决方案
是的,您可以使用具有分类交叉熵的类权重。在计算损失函数时应用权重。错误的分类将根据权重进行处罚。因此,权重既不适用于验证集,也不适用于测试集。这个想法是在训练时模型更加关注一个类并相应地更新权重。
这就是为什么在测试或验证时,学习的权重会隐含地偏向于类权重。
您的代码中唯一的问题可能是类权重。权重可能必须加到 1,但您应该检查库的详细信息。
推荐阅读
- typescript - 从没有属性或属性列表的接口创建类型
- sql - 用户同时更新同一行 SQL Server
- python - 仅替换字符串的结尾
- php - 将 php 网页发送到文件夹并将内容显示为 html
- vb.net - 如何将 SQL 数据库中最后一行的选定单元格值放入两个标签中?
- hazelcast - Hazelcast 和对自定义序列化程序的需求;在创建服务器时有效,但在连接到现有服务器时无效
- python - 为Windows制作一个可执行的kivy文件,pyinstaller有问题
- java - Libgdx 碰撞检测后删除对象
- ruby - 将输入参数传递给 ruby 编写的 shell?
- r - 基于相同的列名或 R 中的单独 df 聚合/求和/计数值