如何获得新图像的前 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()
)。
我正在使用这个函数来预测从未见过的图像的输出
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()
)。