Керас: Как получить уверенность в предсказании класса? - PullRequest
2 голосов
/ 12 июня 2019

Я работаю в Keras / TensorFlow.Это моя модель Keras:

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

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

После этапа обучения и этапа тестирования я кодирую метод, который принимает данные (которые я не знаю, его класс) e Этот метод возвращает прогноз класса суровень доверия.Теперь этот метод возвращает только предсказание класса.Это метод:

def predict(input):
    try:
        x_prediction = tokenize.texts_to_matrix(input)
        q = model.predict(np.array([x_prediction[0],]))
        predicted_label = text_labels[np.argmax(q)]

        print("Prediction: " + predicted_label + "\n")

    except:
        return "Error"

Что мне добавить в метод, чтобы получить уровень достоверности соответствующего прогноза?Я не хочу использовать достоверность переменной 'q', но я хочу использовать байесовский подход.Как я могу сделать?Спасибо

Ответы [ 2 ]

1 голос
/ 12 июня 2019

В Keras, model.predict () на самом деле возвращает вам доверие. Поэтому во фрагменте кода вы можете напечатать q, чтобы увидеть весь массив со всеми уровнями достоверности.

np.argmax (x) дает вам аргумент (позицию) в массиве, где X имеет максимальное значение.

1 голос
/ 12 июня 2019

Значения в векторе q являются вероятностями для каждого класса, которые действуют как доверительные значения, поэтому вы можете просто извлечь максимальное значение и вернуть его как достоверные.

Но обратите внимание, что эти вероятностипроизводимые моделью, и они могут быть самоуверенными, если вы не используете модель, которая выдает калиброванные вероятности (например, байесовская нейронная сеть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...