Оценка вероятности вывода с помощью keras с использованием model.predict ()

У меня есть модель cnn для классификации изображений, которая использует функцию активации сигмоида в качестве последнего слоя

    from keras import layers
    from keras import models
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu',
                    input_shape=(1500, 1500, 3)))
    ..........
    model.add(layers.Dense(1, activation='sigmoid'))

Изображения принадлежат к двум классам. Когда я использую model.predict() для изображения, я получаю 0 или 1. Однако я хочу получить оценку вероятности, например, 0,656, когда я использую model.predict_generator(), он выводит эти оценки. Однако predict_generator требует, чтобы изображения помещались в папки, которые идентифицируют их классы, поэтому это актуально только для проверки и тестирования. Я хочу вывести эту оценку для нового неизвестного изображения или изображений. Как я могу это сделать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
3 049
1

Ответы 1

Я не уверен, что это проблема версии, но я получаю оценки вероятности.

Я использовал фиктивную сеть для проверки вывода:

from keras import layers
from keras import models
from keras import __version__ as used_keras_version
import numpy as np


model = models.Sequential()
model.add(layers.Dense(5, activation='sigmoid', input_shape=(1,)))
model.add(layers.Dense(1, activation='sigmoid'))
print((model.predict(np.random.rand(10))))
print('Keras version used: {}'.format(used_keras_version))

Дает следующий результат:

[[0.252406  ]
 [0.25795603]
 [0.25083578]
 [0.24871194]
 [0.24901393]
 [0.2602583 ]
 [0.25237608]
 [0.25030616]
 [0.24940264]
 [0.25713784]]
Keras version used: 2.1.4

Действительно странно, что вы получаете только двоичный вывод 0 и 1. Тем более, что сигмоидный слой фактически возвращает значения с плавающей запятой.

Надеюсь, это как-то поможет.

На самом деле я использую Keras версии 2.1.6, но все равно получаю 0 или 1.

Wasswa Samuel 03.05.2018 11:29

На самом деле у меня нет конкретного представления, почему вы получаете двоичный вывод, но вы можете попробовать использовать фиктивный код, который я опубликовал выше, если вы получите аналогичные результаты, чтобы узнать, должен ли он что-то делать с вашим кодом или самим keras. В противном случае, возможно, есть различия между python2 и python3, мой код был создан с помощью python3.5.

MBT 03.05.2018 11:48

Другие вопросы по теме