You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TensorFlow重训练示例中打印预测概率?

如何在TensorFlow重训练示例中打印所有类别的预测概率?

嘿,我对TensorFlow这个重训练脚本熟得很,要实现你想要的打印每个测试图像所有类别的预测概率,其实只需要调整一下获取预测结果的逻辑就行——原来的代码只拿了预测的类别索引,现在我们要拿到原始的概率分布。

核心思路

原来的prediction变量是通过tf.argmax(final_tensor, 1)得到的类别索引,而final_tensor才是经过softmax输出的、对应每个类别的概率值数组。我们需要在评估时同时获取这个final_tensor的结果,然后把它和类别名称对应起来格式化输出。

具体修改步骤

  1. 调整评估时获取的张量
    找到你原来的评估代码,把只获取prediction改成同时获取final_tensor(也就是模型的softmax概率输出):
# 假设final_tensor是你脚本中定义的softmax输出张量
test_accuracy, predictions, all_probs = eval_session.run(
    [evaluation_step, prediction, final_tensor],
    feed_dict={ bottleneck_input: test_bottlenecks, ground_truth_input: test_ground_truth })
  1. 格式化打印概率信息
    接下来,你可以根据需求打印所有图像或者仅误分类图像的概率。比如要打印误分类图像的详细概率:
# 获取所有类别的名称列表
class_names = list(image_lists.keys())

if FLAGS.print_misclassified_test_images:
    tf.logging.info('=== MISCLASSIFIED TEST IMAGES WITH PROBABILITIES ===')
    for i, test_filename in enumerate(test_filenames):
        if predictions[i] != test_ground_truth[i]:
            # 把每个类别的名称和概率拼接成字符串
            prob_str = "; ".join([f"{class_names[j]}: {all_probs[i][j]:.1f}" for j in range(len(class_names))])
            # 按你想要的格式输出
            tf.logging.info(f'{test_filename:70s} {prob_str}')

如果想要打印所有测试图像的概率,不管是否分类正确,直接去掉判断条件即可:

tf.logging.info('=== ALL TEST IMAGES WITH PREDICTION PROBABILITIES ===')
class_names = list(image_lists.keys())
for i, test_filename in enumerate(test_filenames):
    prob_str = "; ".join([f"{class_names[j]}: {all_probs[i][j]:.1f}" for j in range(len(class_names))])
    tf.logging.info(f'{test_filename:70s} {prob_str}')

注意点

  • 确保final_tensor是你脚本中定义的softmax输出张量,通常它的定义类似:final_tensor = tf.nn.softmax(tf.matmul(bottleneck_input, final_weights) + final_biases),别搞错成其他张量了。
  • 代码里的.1f是控制概率的小数位数,和你例子里的格式一致,如果需要更多精度可以改成.2f之类的。

内容的提问来源于stack exchange,提问作者krisg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:55