У меня есть модель 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
требует, чтобы изображения помещались в папки, которые идентифицируют их классы, поэтому это актуально только для проверки и тестирования. Я хочу вывести эту оценку для нового неизвестного изображения или изображений. Как я могу это сделать?
Я не уверен, что это проблема версии, но я получаю оценки вероятности.
Я использовал фиктивную сеть для проверки вывода:
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. В противном случае, возможно, есть различия между python2 и python3, мой код был создан с помощью python3.5.
На самом деле я использую Keras версии 2.1.6, но все равно получаю 0 или 1.