如何为 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 函数,但后来我发现这个讨论甚至没有提到它:
你建议我怎么做才能使每个 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.])
我目前正在训练一个网络(使用 Tensorflow 实现的 CNN)以 class 验证超过 3 classes,问题是我最终得到的分数如下:
[ -20145.36, 150069, 578456.3 ].
我想要一个介于 0 和 1 之间的分数(某种概率)。
起初,我想过使用 sigmoid 函数,但后来我发现这个讨论甚至没有提到它:
你建议我怎么做才能使每个 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.])