如何获得新图像的前 k 个预测

How to get top k predictions for a new Image

我正在使用这个函数来预测从未见过的图像的输出

def predictor(img, model):
    image = cv2.imread(img)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = cv2.resize(image, (224, 224))
    image = np.array(image, dtype = 'float32')/255.0
    plt.imshow(image)
    image = image.reshape(1, 224,224,3)
    
    clas = model.predict(image).argmax()
    name = dict_class[clas]
    print('The given image is of \nClass: {0} \nSpecies: {1}'.format(clas, name))

如果我想要前 2(或 k)个准确度,如何更改它 即

70% 的几率是狗

15% 是熊

如果您使用的是 TensorFlow + Keras 并且可能在进行 multi-class 分类,那么 model.predict() 的输出是一个代表 logits 或已经代表概率的张量(logits 之上的 softmax)。

我从这里拿这个例子稍微修改一下:https://www.tensorflow.org/api_docs/python/tf/math/top_k.

#See the softmax, probabilities add up to 1
network_predictions = [0.7,0.2,0.05,0.05]
prediction_probabilities = tf.math.top_k(network_predictions, k=2)
top_2_scores = prediction_probabilities.values.numpy()
dict_class_entries = prediction_probabilities.indices.numpy()

然后在 dict_class_entries 中,您有根据概率的索引(升序排序)。 (即 dict_class_entries[0] = 0(对应于 0.7)和 top_2_scores[0] = 0.7 等)。

您只需将 network_probabilities 替换为 model.predict(image)

注意我删除了 argmax() 以便发送概率数组而不是最大 score/probability 位置的索引(即 argmax())。