#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