Как создать кривую ROC при использовании ImageDataGenerator - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу сгенерировать ROC-кривую для моей обученной модели, но я не знаю, как это сделать с помощью ImageDataGenerator.

Я видел эту ссылку Как я могу построить AUC и ROC, используя fit_generator иvalu_generator для обучения моей сети? , но это только ответило на вопрос, как получить AUC.

Я тоже попробовал это так:

y_pred =  model.predict_generator(test_generator, steps= step_size_test)
fpr, tpr, tresholds = roc_curve(y_pred, test_generator.classes)

Это дало мне ошибку

Это часть моего кода


model.compile(loss="binary_crossentropy", optimizer= 'Adam', metrics=['accuracy', auc])


train_datagen = ImageDataGenerator(rescale=1.0 / 255.0)
train_generator = train_datagen.flow_from_directory(
    directory=f'./data/train/',
    target_size=(Preprocess.image_resolution, Preprocess.image_resolution),
    color_mode="grayscale",
    batch_size=64,
    classes=['a', 'b'],
    class_mode="binary",
    shuffle=True,
    seed=42
)

valid_datagen = ImageDataGenerator(rescale=1.0 / 255.0)
valid_generator = valid_datagen.flow_from_directory(
    directory=f'./data/valid/',
    target_size=(Preprocess.image_resolution, Preprocess.image_resolution),
    color_mode="grayscale",
    batch_size=8,
    classes=['a', 'b'],
    class_mode="binary",
    shuffle=True,
    seed=42
)

test_datagen = ImageDataGenerator()
test_generator = test_datagen.flow_from_directory(
    directory=f'./data/test/',
    target_size=(Preprocess.image_resolution, Preprocess.image_resolution),
    color_mode="grayscale",
    batch_size=1,
    classes=['a', 'b'],
    class_mode='binary',
    shuffle=False,
    seed=42
)

step_size_train = train_generator.n // train_generator.batch_size
step_size_valid = valid_generator.n // valid_generator.batch_size
step_size_test = test_generator.n // test_generator.batch_size

model = build_three_layer_cnn_model()

history = model.fit_generator(generator=train_generator, 
                    steps_per_epoch=step_size_train,
                    validation_data=valid_generator,
                    validation_steps=step_size_valid,
                    epochs=10)

1 Ответ

0 голосов
/ 19 апреля 2019

Проблема с вашим кодом здесь:

roc_curve(y_pred, test_generator.classes)

Согласно документации scikit-learn, вам нужно будет передавать оценки (вероятности) вместо классов в качестве второго параметра.

Также обратите внимание, что вашим первым параметром является y_pred вместо y_true.

Попробуйте вызвать roc_curve (y_true, y_scores) , где y_true - вашназемная истинность, а y_scores - вероятности вывода вашей модели (то есть model.predict (X_test))

Документация для ROC-Curve: https://scikit -learn.org / stable / modules / generate / sklearn.metrics.roc_curve.html # sklearn.metrics.roc_curve

...