Не удалось найти точность и кривую ROC моей модели CNN

#python-3.x #deep-learning #conv-neural-network #evaluation #roc

Вопрос:

Мой пример кода CNN выглядит ниже:

 classifier = Sequential()
#1st Conv layer
classifier.add(Convolution2D(64, (9, 9), input_shape=(64, 64, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(4,4)))
#2nd Conv layer
classifier.add(Convolution2D(32, (3, 3), activation='relu'))
classifier.add(MaxPooling2D(pool_size=(2,2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dropout(0.1))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dropout(0.2))
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 2, activation = 'softmax'))
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)
training_set = train_datagen.flow_from_directory('D:/regionGrowing_MLT/png_orig_imgs/Training',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'categorical')
test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory('D:/regionGrowing_MLT/png_orig_imgs/Test',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'categorical'
                                           )
probs=classifier.fit(x = training_set, validation_data = test_set, epochs = 50)
 

Я попробовал следующую строку, чтобы найти кривую ROC, но получил сообщение об ошибке:

 predictions = classifier.predict(test_set)
fpr, tpr,threshold = roc_curve(test_set,predictions)
 

Отобразится следующее сообщение об ошибке:

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-52-2ea53b1ba7f1> in <module>
----> 1 fpr, tpr,threshold = roc_curve(test_set,predictions)

ValueError: Expected array-like (array or non-string sequence), got <keras.preprocessing.image.DirectoryIterator object at 0x000002D21D1B61C0>
 

Любые предложения будут оценены по достоинству.

Комментарии:

1. хай! @farabee не могли бы вы поделиться каким-нибудь блокнотом для совместной работы? Так что я могу понять, в чем проблема с кодом.

2. Скажите мне тип y_test и прогнозы, введя тип(y_test)

Ответ №1:

Эмм! Из-за ошибки я думаю, что вам нужно изменить объект изображения keras.processing на массив. Попробуйте это, я думаю, это вам поможет.

Точность

 fil_acc_orig = accuracy_score(y_test, predictions.to_array())
 

Кривая ROC

 fil_acc_orig = roc_curve(y_test, predictions.to_array())
 

Комментарии:

1. Привет, @sohaib, я попробовал приведенный выше код. Но я получаю следующую ошибку. Трассировка ошибки атрибута (последний последний вызов) <ipython-input-54-b85cd33617bd> в <ipython-input-54-b85cd33617bd><модуль> — — — <модуль>> 1 fil_acc_orig = accuracy_score(предсказания, предсказания.to_array()) Ошибка атрибута: объект «numpy.ndarray» не имеет атрибута «to_array»

2. хорошо, каков тип прогноза и Y_test?

3. На самом деле я не использовал x_train, y-train, x_test и y_test. Я сохранил свои изображения в папку «Набор тренировок и тестов» и использовал ее, как указано в приведенном выше коде. есть ли способ, которым я могу найти ROC, используя описанный выше метод, или мне нужно разделить его на набор для обучения и тестирования.

4. Нет, Нет! Мне просто нужно знать, какой тип переменных вы отправляете в функцию ROC, как в этом «‘roc_curve(y_test, predictions.to_array ()) «» что такое тип y-теста и какой тип предсказаний

5. Тип Y_test и прогнозов-numpy.ndarray