如何为 CNN 的每个 class 获得 0 到 1 之间的分数?

How to get a score between 0 and 1 for each class for a CNN?

我目前正在训练一个网络(使用 Tensorflow 实现的 CNN)以 class 验证超过 3 classes,问题是我最终得到的分数如下:

[ -20145.36, 150069, 578456.3 ].

我想要一个介于 0 和 1 之间的分数(某种概率)。

起初,我想过使用 sigmoid 函数,但后来我发现这个讨论甚至没有提到它:

https://www.quora.com/How-do-you-normalize-numeric-scores-to-a-0-1-range-for-comparing-different-machine-learning-techniques

你建议我怎么做才能使每个 class 的分数介于 0 和 1 之间?

谢谢

作为最后一层,您总是使用 softmax 来获得 n-class class 化分数。因此,您有很多选项,如 tensorflow classification docs.

中所述

最简单的就是使用tf.nn.softmax()

softmax = exp(logits) / reduce_sum(exp(logits), dim)

示例:

In [63]: ar = np.array([ -20145.36, 150069, 578456.3 ])

In [64]: scores = tf.nn.softmax(ar)

In [65]: sess = tf.InteractiveSession()

In [66]: scores.eval()
Out[66]: array([ 0.,  0.,  1.])