gpt4 book ai didi

python - 使用 Tensorflow 的 MNIST 图像的熵

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:43 24 4
gpt4 key购买 nike

我想测量 MNIST 图像的熵。然而,大多数强度值为 0,tf.log 返回 inf。我知道我可以简单地计算熵:

entropy = tf.reduce_mean(-tf.reduce_sum(X * tf.log(X), axis=1))

其中 X 是 MNIST 图像批处理的占位符,定义为 X = tf.placeholder("float", [None, 784])。然而,结果是nan(很多像素值为0,所以tf.log会给出inf)。有没有办法解决这个问题,或者有其他方法来计算一幅图像的熵?

最佳答案

熵取决于每个强度值的概率,而不是值本身。概率为 0 的值不进入计算。

编写代码来计算出现在照片中的每个强度值的比例。 那些构成了你的 X 向量。


我认为您误解了熵的概念。你可以查一下that part , 以及计算。

一般来说,它是您从任何一个分布的传输样本中获得的平均惊喜量。另一种解释它的方法是在给定频率分布(霍夫曼代码)的情况下设计最佳二进制编码。传输的平均比特数就是熵。

现在,回到您的案例。为了简化数字,让我们考虑一个 10x10 图像,只有四个强度级别,0-3。 70 个值是 0,20 个是 1,还有六个 2 和四个 3 填满了这个集合。在这种情况下,上面的 X 数组只有四个值:[0.70, 0.20, 0.06, 0.04]。没有零值或负值会影响您的日志计算。

要手动执行此操作,让我们考虑一下霍夫曼编码。头脑简单的情况是用 2 位二进制等效值对每个值进行编码:00、01、10、11。这为我们提供了每个传输值 2 位的固定速率。

但是,我们可以做得更好。如果我们将它们编码为

0: 0
1: 10
2: 110
3: 111

那么我们传输的平均比特数是:

0.70*1 + 0.20*2 + 0.06*3 + 0.04*3
= 0.70 + 0.40 + 0.18 + 0.12
= 1.40 bits

...所以 1.40 是此图像的熵。请注意,我们没有记录任何,仅记录频率

关于python - 使用 Tensorflow 的 MNIST 图像的熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com