compute_entropy函数

python 复制代码
def compute_entropy(prob_map):
    """
    """
    # 
    epsilon = 1e-8
    # 
    prob_map = F.softmax(prob_map, dim=1)  # 
    # -sum(p_k * log(p_k))
    entropy_map = -torch.sum(prob_map * torch.log(prob_map + epsilon), dim=1)  # 
    # 
    K = prob_map.shape[1]  # 
    max_entropy = torch.log(torch.tensor(K, dtype=torch.float32))  # 

    # 
    normalized_entropy_map = entropy_map / max_entropy  # 

    return 1.0 - normalized_entropy_map  # 

这段代码实现了计算概率图的信息熵并进行归一化处理的功能。让我逐行详细解释:

复制代码

python

复制代码
`def compute_entropy(prob_map):
    """
    """
    # 定义一个极小值,防止log(0)产生无穷大
    epsilon = 1e-8
    # 对概率图应用softmax函数,确保各类别概率和为1
    prob_map = F.softmax(prob_map, dim=1)
    # 计算信息熵:-sum(p_k * log(p_k))
    entropy_map = -torch.sum(prob_map * torch.log(prob_map + epsilon), dim=1)
    # 获取类别数量K
    K = prob_map.shape[1]
    # 计算最大可能的熵值:log(K)
    max_entropy = torch.log(torch.tensor(K, dtype=torch.float32))
    
    # 将熵值归一化到[0,1]区间
    normalized_entropy_map = entropy_map / max_entropy
    
    # 返回1-归一化熵值,这样高置信度对应高值
    return 1.0 - normalized_entropy_map`

让我用具体例子来说明:

假设我们有一个3类分割的概率图:

复制代码

python

复制代码
`# prob_map形状为[1, 3, 2, 2],即1个样本,3个类别,2x2图像
# 经过softmax后每个像素位置的概率分布如下:

位置(0,0): [0.2, 0.3, 0.5]  # 类别1概率0.2, 类别2概率0.3, 类别3概率0.5
位置(0,1): [0.8, 0.1, 0.1]  # 类别1概率0.8, 类别2概率0.1, 类别3概率0.1
位置(1,0): [0.33,0.33,0.34] # 类别1概率0.33,类别2概率0.33,类别3概率0.34
位置(1,1): [0.4, 0.4, 0.2]  # 类别1概率0.4, 类别2概率0.4, 类别3概率0.2`

计算每个位置的信息熵:

位置(0,0): 0.2, 0.3, 0.5

  • 熵 = -(0.2×log(0.2) + 0.3×log(0.3) + 0.5×log(0.5))
  • ≈ -(0.2×(-1.61) + 0.3×(-1.20) + 0.5×(-0.69))
  • ≈ -(−0.32 − 0.36 − 0.35) = 1.03

位置(0,1): 0.8, 0.1, 0.1

  • 熵 = -(0.8×log(0.8) + 0.1×log(0.1) + 0.1×log(0.1))
  • ≈ -(0.8×(-0.22) + 0.1×(-2.30) + 0.1×(-2.30))
  • ≈ -(−0.18 − 0.23 − 0.23) = 0.64

位置(1,0): 0.33, 0.33, 0.34

  • 熵 ≈ -(0.33×(-1.11) + 0.33×(-1.11) + 0.34×(-1.07))
  • ≈ 1.10

位置(1,1): 0.4, 0.4, 0.2

  • 熵 ≈ -(0.4×(-0.92) + 0.4×(-0.92) + 0.2×(-1.61))
  • ≈ 1.04

归一化处理:

  • 最大可能熵值 = log(3) ≈ 1.10

  • 归一化后:

    • 位置(0,0): 1.03/1.10 ≈ 0.94
    • 位置(0,1): 0.64/1.10 ≈ 0.58
    • 位置(1,0): 1.10/1.10 = 1.00
    • 位置(1,1): 1.04/1.10 ≈ 0.95

    最终结果(1-归一化熵):

  • 位置(0,0): 1.0 - 0.94 = 0.06

  • 位置(0,1): 1.0 - 0.58 = 0.42

  • 位置(1,0): 1.0 - 1.00 = 0.00

  • 位置(1,1): 1.0 - 0.95 = 0.05

可以看出,熵值越低(不确定性越小)的位置,最终结果越接近1,表示模型对该位置的预测越有信心。

相关推荐
Cc.Y1 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川1 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸1 小时前
排序算法介绍
python·算法·排序算法
笔墨登场说说2 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
爱编程的小白L2 小时前
2027 计算机毕业设计选题汇总|深度学习专项(2027最新)
人工智能·深度学习·课程设计
Rocky Ding*2 小时前
MOSS-VL技术原理深度解析:让视觉流持续进入生成过程,实时 Agent 才有架构基础
论文阅读·人工智能·深度学习·机器学习·aigc·多模态·ai-native
MoRanzhi12032 小时前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
jimmyleeee3 小时前
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南
人工智能·深度学习·安全
面包狗AI4S3 小时前
【AI4S】生化环材高可信技术与产业周报(2026-10-03—2026-10-09)
人工智能·深度学习·机器学习·ai
刘科领3 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai