如何将TensorFlow model.predict()结果缩放至总和为100%
解决方法
当前你的模型输出是logits(原始未激活的预测值),这类值可能为负且总和不为1,需要通过Softmax函数转换为总和为1的概率分布,再处理成你需要的比例形式。
修改后的预测函数如下:
import numpy as np img = "./img/hat.jpg" def predict(img): img = preprocess_image(img) pred = model.predict(img) pred = np.squeeze(pred).astype(float) # 将logits转换为总和为1的概率 pred_probs = np.exp(pred) / np.sum(np.exp(pred)) # 手动实现Softmax,兼容所有numpy版本 # 若你的numpy版本≥1.20.0,也可以直接用:pred_probs = np.softmax(pred) # 保留4位小数(可根据需求调整),生成类别-概率字典 pred_result = {cls: round(prob, 4) for cls, prob in zip(class_names, pred_probs)} print(pred_result) return pred_result
关键说明
- Softmax函数的作用:将任意实数的logits转换为0到1之间的概率值,且所有类别的概率总和严格为1(即100%)。
- 手动实现Softmax的公式是
np.exp(pred) / np.sum(np.exp(pred)),原理是对每个logits取指数(消除负数),再除以所有指数的和(归一化到总和为1)。 - 若需要百分比形式,只需将
prob乘以100,比如round(prob * 100, 2),得到的结果就是百分比数值(总和为100)。
内容的提问来源于stack exchange,提问作者pirekare
相关产品推荐
相关产品推荐

