使用加权 类 在 Keras 中评估 DenseNet 模型
Evaluating DenseNet model in Keras with weighted classes
我正在使用 DenseNet 在 Keras 中进行二元分类。
创建加权 类:
# Assign weights
weight_for_0 = num_normal/(num_normal + num_covid)
weight_for_1 = num_covid/(num_normal + num_covid)
class_weight = {0: weight_for_0, 1: weight_for_1}
# Print
print(f"Weight for class 0: {weight_for_0:.2f}")
print(f"Weight for class 1: {weight_for_1:.2f}")
结果,我
Weight for class 0: 0.74
Weight for class 1: 0.26
我为模型安装了 class_weight
history_dense201_weighted = model_dense_201.fit_generator(train_generator, epochs = 20,
validation_data = valid_generator, class_weight = class_weight, callbacks = [# mcp_save,
early_stopping, tensorboard_callback])
但是当我要评估模型时,我不确定如何评估加权模型,因为class_weight
是历史的一部分。
如何更新此代码,而不是使用默认 model_dense_201
模型加权模型?
# Evaluation
evaluation = model_dense_201.evaluate(valid_generator)
print(f"Validation Accuracy: {evaluation[1] * 100:.2f}%")
evaluation = model_dense_201.evaluate(train_generator)
print(f"Train Accuracy: {evaluation[1] * 100:.2f}%")
找到这个。
https://github.com/tensorflow/tensorflow/issues/35825
引自 Francois(又名 Chollet):
“我们在评估中不支持 class 权重的原因是 class_weight 参数表示根据标签计算的样本权重,但标签不应作为输入评估期间的模型。在训练期间这很好,但在评估期间这表示数据从标签泄漏到您的指标。如果您在评估中使用 class 权重,您的分数将无法在真实测试数据上重现(当您没有标签)。
所以这在概念上是错误的。"
我正在使用 DenseNet 在 Keras 中进行二元分类。
创建加权 类:
# Assign weights
weight_for_0 = num_normal/(num_normal + num_covid)
weight_for_1 = num_covid/(num_normal + num_covid)
class_weight = {0: weight_for_0, 1: weight_for_1}
# Print
print(f"Weight for class 0: {weight_for_0:.2f}")
print(f"Weight for class 1: {weight_for_1:.2f}")
结果,我
Weight for class 0: 0.74
Weight for class 1: 0.26
我为模型安装了 class_weight
history_dense201_weighted = model_dense_201.fit_generator(train_generator, epochs = 20,
validation_data = valid_generator, class_weight = class_weight, callbacks = [# mcp_save,
early_stopping, tensorboard_callback])
但是当我要评估模型时,我不确定如何评估加权模型,因为class_weight
是历史的一部分。
如何更新此代码,而不是使用默认 model_dense_201
模型加权模型?
# Evaluation
evaluation = model_dense_201.evaluate(valid_generator)
print(f"Validation Accuracy: {evaluation[1] * 100:.2f}%")
evaluation = model_dense_201.evaluate(train_generator)
print(f"Train Accuracy: {evaluation[1] * 100:.2f}%")
找到这个。
https://github.com/tensorflow/tensorflow/issues/35825
引自 Francois(又名 Chollet):
“我们在评估中不支持 class 权重的原因是 class_weight 参数表示根据标签计算的样本权重,但标签不应作为输入评估期间的模型。在训练期间这很好,但在评估期间这表示数据从标签泄漏到您的指标。如果您在评估中使用 class 权重,您的分数将无法在真实测试数据上重现(当您没有标签)。
所以这在概念上是错误的。"