gpt4 book ai didi

python - Keras 模型在训练和验证方面获得了很高的准确性,但在混淆指标上却出现了困惑

转载 作者:行者123 更新时间:2023-12-01 07:11:45 25 4
gpt4 key购买 nike

所以我有一个二元分类模型,它在训练验证和测试阶段获得了非常好的分数。

validation_generator.reset # reset the validation gen for testing
loss: 0.0725 - accuracy: 0.9750 - val_loss: 0.1703 - val_accuracy: 0.9328
scores = model.evaluate_generator(validation_generator, workers=1, use_multiprocessing=False, verbose=1)
print(scores)
[0.023366881534457207, 0.9353214502334595]

好吧,这对我来说看起来真的很好,对吧?现在,当我尝试混淆指标时,这一切都被分组到一个类中,这是完全错误的。

Confusion Matrix
[[1045 0]
[1537 0]]

这是CM代码:

validation_generator.reset
Y_pred = model.predict_generator(validation_generator, validation_generator.samples // BATCH_SIZE+1)
y_pred = np.argmax(Y_pred, axis=1)
print(confusion_matrix(validation_generator.classes, y_pred))
target_names = ['male', 'female']
print(classification_report(validation_generator.classes, y_pred, target_names=target_names))

我不认为那不应该。它可能与发电机有关,但对我来说看起来是正确的。

BATCH_SIZE = 32
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
horizontal_flip=True,
validation_split=0.2) # set validation split

train_generator = train_datagen.flow_from_directory(
DATA_PATH,
target_size=(224, 224),
shuffle=True,
batch_size=BATCH_SIZE,
class_mode='binary',
subset='training') # set as training data

validation_generator = train_datagen.flow_from_directory(
DATA_PATH, # same directory as training data
target_size=(224, 224),
batch_size=BATCH_SIZE,
shuffle=False,
class_mode='binary',
subset='validation') # set as validation data

我应该将验证批量大小设置为 1 吗?

如果有帮助的话,这是模型声明。

history = model.fit_generator(
train_generator,
steps_per_epoch = train_generator.samples // BATCH_SIZE,
validation_data = validation_generator,
validation_steps = validation_generator.samples // BATCH_SIZE,
epochs = EPOCHS,
verbose=1,
callbacks=callbacks_list)

更新并修复此问题:

将其添加到代码

y_pred[y_pred <= 0.5] = 0.
y_pred[y_pred > 0.5] = 1.
#Old code
#y_pred = np.argmax(Y_pred, axis=1) # This does not work for this

最佳答案

据我了解,您正在进行二进制分类,并且我在您的代码中看到您正在使用np.argmax(Y_pred, axis=1)。我认为 argmax 应该与多类分类一起使用。

要解决此问题,您应该尝试类似 y_pred = [y[0] >= 0.5 for y in y_pred]

请注意,我不确定此代码是否完全有效,但我确定需要替换np.argmax()

关于python - Keras 模型在训练和验证方面获得了很高的准确性,但在混淆指标上却出现了困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180690/

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