Получение прогноза в Керасе

Я успешно обучил простую модель в Керасе для классификации изображений:

model = Sequential()

model.add(Convolution2D(32, 3, 3, border_mode='valid', input_shape=(img_channels, img_rows, img_cols),
                        activation='relu', name='conv1_1'))
model.add(Convolution2D(32, 3, 3, activation='relu', name='conv1_2'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Convolution2D(64, 3, 3, border_mode='valid', activation='relu', name='conv2_1'))
model.add(Convolution2D(64, 3, 3, activation='relu', name='conv2_2'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))

model.add(Dense(nb_classes, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

Я также могу предсказать классы изображений, используя

y_pred = model.predict_classes(img, 1, verbose=0)

Однако выходy_pred всегда двоичный Это также, кажется, имеет место при использованииpredict_proba а такжеpredict, Мои выводы в этой форме

[[ 1.  0.  0.  0.]]
[[ 0.  1.  0.  0.]]

Это работает хорошо, но я хотел бы иметь процент вероятности для каждой классификации, например

[[ 0.8  0.1  0.1  0.4]]

Как мне получить это в Керасе?

Ответы на вопрос(1)

# Input; Exponent; Softmax value 
20    485165195  0.99994
 9         8103  0.00002
 5          148  0.00000
10        22026  0.00005
------------------------
# Sum 485195473  1

Так как экспоненциальная функция растет очень быстроsoftmax начинает выдавать горячий вывод, начиная с порядка 1. В Керасереализацияsoftmax функция максимальное значение вычитается из входного значения, но в указанном выше случае это не будет иметь никакого значения.

Возможные способы исправить это:

Убедитесь, что входные изображения масштабируются так, чтобы значения пикселей находились между0 а также1.

Добавь немногорегуляризаторы к вашей модели.

Ваш ответ на вопрос