Keras:如何获得预测班级的信心?

时间:2019-06-12 12:48:10

标签: python tensorflow keras

我在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'])

在训练步骤和测试步骤之后,我正在编码一个接受输入的方法(我不知道他的课),而该方法将以置信度返回班级预测。 现在,此方法仅返回类的预测。这是方法:

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 个答案:

答案 0 :(得分:1)

向量q中的值是每个类的概率,它们充当置信度值,因此您可以获取最大值并将其作为置信度返回。

但是请注意,这些概率是由模型产生的,除非您使用产生校准概率的模型(例如贝叶斯神经网络),否则它们可能过于自信。

答案 1 :(得分:1)

在Keras中,model.predict()实际上会返回您的置信度。因此,在代码段中,您可能需要打印q以查看所有置信度级别的整个数组。

np.argmax(x)在X为最大值的数组中为您提供参数(位置)。