如何为 CNN 的每个班级获得 0 到 1 之间的分数?
Posted
技术标签:
【中文标题】如何为 CNN 的每个班级获得 0 到 1 之间的分数?【英文标题】:How to get a score between 0 and 1 for each class for a CNN? 【发布时间】:2017-09-18 08:20:55 【问题描述】:我目前正在训练一个网络(用 Tensorflow 实现的 CNN)来对 3 个以上的类进行分类,问题是我最终得到的分数如下:
[ -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
你建议我怎么做才能让每门课的分数在 0 到 1 之间?
谢谢
【问题讨论】:
tf.nn.softmax() 会将网络输出转换为有效的概率分布,即所有概率都在 0 和 1 之间并且它们总和为 1。有关 TensorFlow 文档,请参见此处:@987654322 @这里解释一下:tensorflow.org/get_started/mnist/beginners 【参考方案1】:作为最后一层,你总是使用 softmax 来获得 n 类分类分数。所以,你有很多选择,正如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.])
【讨论】:
以上是关于如何为 CNN 的每个班级获得 0 到 1 之间的分数?的主要内容,如果未能解决你的问题,请参考以下文章