首页 > 解决方案 > 加快不确定性计算

问题描述

我想为主动学习目的计算蒙特卡洛辍学的不确定性分数。
我对同一图像有 T 个预测,目前我正在使用以下函数计算每个像素的预测的熵。如果预测的类别不同(例如,对于 T = 3: [1, 2, 3]),该函数应该返回一个较高的值,而当类别相等时(例如 [1, 1, 1]),该函数应该返回一个较低的值

def calculate_entropy(labels, base=e):
    value,counts = np.unique(labels, return_counts=True)
    norm_counts = counts / counts.sum()
    return -(norm_counts * np.log(norm_counts)/np.log(base)).sum()

我的预测结果是这样的数组形状:[T, Height, Width]输出形状为[Height, Width]. 因为我想要每一行的熵,所以我这样调用函数: np.apply_along_axis(func1d=calculate_entropy, axis=1, arr=data)

对于具有多个预测的一张图像,该功能需要 3 秒,这太高了。有人建议如何改进吗?

示例输入:

preds = np.array([
[[0, 2, 0],
 [1, 1, 0]],

[[0, 2, 9],
 [1, 2, 9]],

 [[1, 1, 0],
 [2, 2, 9]],

 [[1, 1, 9],
 [3, 2, 9]],
])

示例输出:

[[0.69314718 0.69314718 0.69314718]
 [1.03972077 0.56233514 0.56233514]]

标签: python

解决方案


推荐阅读