【问题标题】:Tensorflow: Output probabilities from sigmoid cross entropy lossTensorflow:来自 sigmoid 交叉熵损失的输出概率
【发布时间】:2018-01-31 18:25:32
【问题描述】:

我有一个用于多标签分类问题的 CNN,作为损失函数,我使用 tf.nn.sigmoid_cross_entropy_with_logits

cross entropy equation 我希望输出是每个类的概率,但我得到的是 (-∞, ∞) 中的浮点数。

经过一番谷歌搜索后,我发现由于一些内部归一化操作,每行 logits 在被输入方程之前都可以解释为概率。

我对如何实际输出后验概率而不是浮点数以绘制 ROC 感到困惑。

【问题讨论】:

    标签: machine-learning tensorflow cross-entropy


    【解决方案1】:

    tf.sigmoid(logits) 为您提供概率。

    您可以在tf.nn.sigmoid_cross_entropy_with_logits 的文档中看到tf.sigmoid 是将logits 标准化为概率的函数。

    【讨论】:

    • 假设有 [0.1,10,100] 和 [1,100,1000]。将 sigmoid 应用于它们,10 和 100 之间的差异不会大于 100 和 1000 之间的差异,尽管这些场景在相关值方面是等效的?
    • 我不明白你的评论。您能否详细说明以使其更清楚? abs(sigmoid(10) - sigmoid(100)) >> abs(sigmoid(100) - sigmoid(1000)) 但我不明白这与答案/原始问题有什么关系。
    • 我的意思是,如果有 3 个选项具有关联值 [0.1,10,100](案例 1)或 [1,100,1000](案例 2),那么通过应用 sigmoid 函数,概率不会由于我上面提到的差异,在案例 1,2 中以相同的方式分配。我可能是错的,这只是一个想法。这就是我拒绝sigmoid函数并提出问题的原因:)
    • 你是对的,概率不会以同样的方式分配。但是,当您像您在问题中提到的那样进行多标签分类(多个标签可以应用于同一实例)时,这是可取的。如果一个实例只能有一个标签,则tf.nn.softmax_cross_entropy_with_logits 是更好的选择,在这种情况下,您可以使用tf.nn.softmax 归一化为概率分布。
    • 刷新我的统计学知识,我确信根据累积分布函数的定义,sigmoid确实是一个概率函数,所以我猜你的答案符合我的问题:)
    猜你喜欢
    • 2018-05-31
    • 2016-08-01
    • 2021-11-25
    • 2017-03-14
    • 2021-01-02
    • 1970-01-01
    • 2019-03-30
    • 2018-04-12
    • 2021-08-25
    相关资源
    最近更新 更多