Как мне получить вероятность/достоверность в качестве вывода для CNN, используя keras в Python? ⇐ Python
Как мне получить вероятность/достоверность в качестве вывода для CNN, используя keras в Python?
Итак, я новичок в глубоком обучении и начал с набора данных о кошках и собаках для модели CNN с использованием Keras.
В моем коде я не могу получить вероятности в качестве выходных данных ни для classifier.predict, ни для classifier.predict_proba. Я просто получаю результат в виде [[0,1]] или [[1,0]]. Я попробовал несколько изображений.
Но я ищу что-то вроде: [[0.4,0.6]], [[0.89,0.11]]
Я пробовал изменить функцию потерь с binary_crossentropy на categorical_crossentropy.
Я попробовал изменить функцию активации выходного слоя с сигмоида на softmax.
Я также пробовал изменить class_mode в flow_from_directory с binary на categorical.
Я думаю, что я ошибся с типом данных, поскольку тип выходного массива — float32. Но даже если это ошибка, я не знаю, как ее изменить.
Я не могу понять, где я ошибаюсь. Пожалуйста, разъясните/помогите. Спасибо.
Зачем мне нужны вероятности?
В другом моем проекте я разделю изображение на n частей меньшего размера. Затем я воспользуюсь классификатором для n-го количества частей отдельно и найду одну часть с наибольшей вероятностью. Однако для этого я не буду использовать набор данных о кошках и собаках. Это для выбора ячеек, и этот набор данных также будет иметь двоичный вывод как «ДА» или «НЕТ». Любые предложения по этому поводу также приветствуются. Спасибо.
Ссылка на код в Github.
#Создание CNN из keras.models импортировать последовательный из keras.layers импортировать Convolution2D из keras.layers импортировать MaxPooling2D из keras.layers импортировать Flatten из keras.layers импортировать Dense #Инициализация CNN классификатор = Последовательный() #Шаг 1 — Свертка classifier.add(Convolution2D(filters=32,kernel_size=[3,3],input_shape=(64,64,3),activation='relu')) #Шаг 2 – Объединение classifier.add(MaxPooling2D(pool_size=(2,2),шаги=2)) #Добавление еще одного сверточного слоя для большей точности #classifier.add(Convolution2D(filters=32,kernel_size=[3,3],activation='relu')) #classifier.add(MaxPooling2D(pool_size=(2,2),шаги=2)) #Шаг 3 — Сглаживание classifier.add(Сгладить()) #Шаг 4 — Полностью связанные слои classifier.add(Dense(units= 64, active='relu')) classifier.add(Dense(units= 2, active='softmax')) #Составление CNN classifier.compile(optimizer='adam',loss = 'categorical_crossentropy', metrics=['accuracy']) #Часть 2. Подгонка CNN к изображениям из keras.preprocessing.image импортировать ImageDataGenerator train_datagen=ImageDataGenerator( масштабирование = 1./255, диапазон_сдвига=0,2, масштаб_диапазона = 0,2, Horizontal_flip=Истина) test_datagen = ImageDataGenerator (масштабирование = 1./255) Training_set = train_datagen.flow_from_directory('dataset/training_set', целевой_размер=(64,64), размер_пакета = 32, class_mode='категориальный') test_set = test_datagen.flow_from_directory('dataset/test_set', целевой_размер=(64,64), размер_пакета = 32, class_mode='категориальный') classifier.fit_generator(training_set, шаги_за_эпоху = 250, epochs=3, #Просто пока я сохранил очень мало эпох. validation_data=test_set, validation_steps=62) #Делаем новые прогнозы импортировать numpy как np из изображения импорта keras.preprocessing test_image_luna=image.load_img('dataset/single/SkilletLuna.JPG',target_size=(64,64)) test_image2=image.img_to_array(test_image_luna) test_image2 = np.expand_dims (test_image2, ось = 0) luna=classifier.predict_proba(test_image2) В [11]: луна ...: Out[11]: массив([[0., 1.]], dtype=float32)
Итак, я новичок в глубоком обучении и начал с набора данных о кошках и собаках для модели CNN с использованием Keras.
В моем коде я не могу получить вероятности в качестве выходных данных ни для classifier.predict, ни для classifier.predict_proba. Я просто получаю результат в виде [[0,1]] или [[1,0]]. Я попробовал несколько изображений.
Но я ищу что-то вроде: [[0.4,0.6]], [[0.89,0.11]]
Я пробовал изменить функцию потерь с binary_crossentropy на categorical_crossentropy.
Я попробовал изменить функцию активации выходного слоя с сигмоида на softmax.
Я также пробовал изменить class_mode в flow_from_directory с binary на categorical.
Я думаю, что я ошибся с типом данных, поскольку тип выходного массива — float32. Но даже если это ошибка, я не знаю, как ее изменить.
Я не могу понять, где я ошибаюсь. Пожалуйста, разъясните/помогите. Спасибо.
Зачем мне нужны вероятности?
В другом моем проекте я разделю изображение на n частей меньшего размера. Затем я воспользуюсь классификатором для n-го количества частей отдельно и найду одну часть с наибольшей вероятностью. Однако для этого я не буду использовать набор данных о кошках и собаках. Это для выбора ячеек, и этот набор данных также будет иметь двоичный вывод как «ДА» или «НЕТ». Любые предложения по этому поводу также приветствуются. Спасибо.
Ссылка на код в Github.
#Создание CNN из keras.models импортировать последовательный из keras.layers импортировать Convolution2D из keras.layers импортировать MaxPooling2D из keras.layers импортировать Flatten из keras.layers импортировать Dense #Инициализация CNN классификатор = Последовательный() #Шаг 1 — Свертка classifier.add(Convolution2D(filters=32,kernel_size=[3,3],input_shape=(64,64,3),activation='relu')) #Шаг 2 – Объединение classifier.add(MaxPooling2D(pool_size=(2,2),шаги=2)) #Добавление еще одного сверточного слоя для большей точности #classifier.add(Convolution2D(filters=32,kernel_size=[3,3],activation='relu')) #classifier.add(MaxPooling2D(pool_size=(2,2),шаги=2)) #Шаг 3 — Сглаживание classifier.add(Сгладить()) #Шаг 4 — Полностью связанные слои classifier.add(Dense(units= 64, active='relu')) classifier.add(Dense(units= 2, active='softmax')) #Составление CNN classifier.compile(optimizer='adam',loss = 'categorical_crossentropy', metrics=['accuracy']) #Часть 2. Подгонка CNN к изображениям из keras.preprocessing.image импортировать ImageDataGenerator train_datagen=ImageDataGenerator( масштабирование = 1./255, диапазон_сдвига=0,2, масштаб_диапазона = 0,2, Horizontal_flip=Истина) test_datagen = ImageDataGenerator (масштабирование = 1./255) Training_set = train_datagen.flow_from_directory('dataset/training_set', целевой_размер=(64,64), размер_пакета = 32, class_mode='категориальный') test_set = test_datagen.flow_from_directory('dataset/test_set', целевой_размер=(64,64), размер_пакета = 32, class_mode='категориальный') classifier.fit_generator(training_set, шаги_за_эпоху = 250, epochs=3, #Просто пока я сохранил очень мало эпох. validation_data=test_set, validation_steps=62) #Делаем новые прогнозы импортировать numpy как np из изображения импорта keras.preprocessing test_image_luna=image.load_img('dataset/single/SkilletLuna.JPG',target_size=(64,64)) test_image2=image.img_to_array(test_image_luna) test_image2 = np.expand_dims (test_image2, ось = 0) luna=classifier.predict_proba(test_image2) В [11]: луна ...: Out[11]: массив([[0., 1.]], dtype=float32)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Модель Keras CNN дает разные прогнозы вывода для одного и того же ввода
Anonymous » » в форуме Python - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-