python - keras中model.compile的参数'weighted_metrics'和model.fit_generator的参数'class_weight'之间的区别?
问题描述
在训练用于图像分类的 keras 模型(来自 DOG BREED IDENTIFICATION 数据集 KAGGLE 的 120 个类)时,我需要使用我在某处阅读的类权重来平衡类,在示例中我看到人们使用 fit_generator 的参数 class_weight。但我在 model.compile 中发现了另一个参数 weighted_metrics,其在文档中的描述是:“在训练和测试期间由 sample_weight 或 class_weight 评估和加权的指标列表”。我要使用这个吗?请通过任何示例解释此参数的用途。
#Calculating Class weights
counter = Counter(train_generator.classes)
max_value = float(max(counter.values()))
CLASS_WEIGHTS = {classid: max_value / num_occurences
for classid, num_occurences in counter.items()}
# Model Compile
model.compile(optimizer=Adam(lr=LR),
loss=categorical_crossentropy,
metrics=[categorical_accuracy],
weighted_metrics=None) # <--------------- This parameter
STEPS_PER_EPOCH = train_generator.n//train_generator.batch_size
VAL_STEPS = val_generator.n//val_generator.batch_size
model.fit_generator(train_generator,
steps_per_epoch=STEPS_PER_EPOCH,
epochs=EPOCHS,
callbacks=callback_list,
verbose=1,
class_weight=CLASS_WEIGHTS,
validation_data=val_generator,
validation_steps=VAL_STEPS) # USED CLASS_WEIGHTS HERE
解决方案
是的,您可以将它们用于您的不平衡数据集。
加权度量
是一个指标列表,考虑到
类权重
你传入fit_generator。
所以在你的例子中,你可以设置
weighted_metrics=['accuracy']
和
class_weight = {0 : 3, 1: 4}
weighted_metrics 参数的目的是给出一个指标列表,这些指标将考虑您在 fit_generator 中传递的 class_weights。
推荐阅读
- sql - SQL - 如果满足条件,防止触发器触发
- javascript - 在 Angular6 和 Laravel 中通过 Facebook 手动登录
- amazon-web-services - Cloudtrail 将日志记录到 AWS Elasticsearch
- excel - 更改单元格时自动将行复制到新工作表excel VBA
- javascript - 在 JSF/XHTML 上运行由 webpack 构建的 ReactJS
- sql - T-SQL批量导出查询结果到csv
- javascript - 使用 VSCode 调试 Electron 渲染器进程
- html - 如何在表单页面上的发送按钮上设置超时
- excel - 在工作簿之间复制和粘贴时消除 VBA Excel 中的屏幕闪烁
- angular - 离子移动应用程序在开发中运行良好,但在生产中运行不佳