0

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}%")
4

1 に答える 1

0

これを見つけました。

https://github.com/tensorflow/tensorflow/issues/35825

Francois (別名 Chollet) からの引用:

「評価でクラスの重みをサポートしない理由は、class_weight 引数がラベルから計算されたサンプルの重みを表すためですが、ラベルは評価中にモデルへの入力であってはなりません。トレーニング中はこれで問題ありませんが、評価中は問題ありません。これは、ラベルからメトリックへのデータ リークを表します。評価でクラスの重み付けを使用した場合、実際のテスト データでスコアを再現することはできません (ラベルがない場合)。

したがって、これは概念的に間違っています。」

于 2021-06-14T22:44:44.757 に答える