【问题标题】:Keras image binary classification, which class is assigned probability 0 and 1 ? Using Functional APIKeras图像二进制分类,哪个类被分配概率0和1?使用函数式 API
【发布时间】:2021-06-16 15:47:19
【问题描述】:

在实现二元分类时,大多数人使用sigmoid 函数作为最后一层的激活。据我了解,sigmoid 函数给出的概率介于 0 和 1 之间,我们设置了一个阈值(主要是 0.5)来确定类标签。

但是,我对哪个班级的概率是多少感到困惑?假设我有两个类 A 和 B ,我得到预测结果 p 或 p% 。是是类A的概率还是不是类A的概率(即B)。

如果以前在这里问过这个问题,但我找不到它,我深表歉意。因为我使用的是Keras Functional API,所以我不能使用predict_classes() 函数。此外,我主要使用生成器从ImageDatagenerator 加载我的数据集,主要是flow_from_dataframe(),您可以在其中提供类标签或类列表。在我的情况下,它是我的数据框中的两个字符串 "REAL" 或 "FAKE" 。

还有没有办法设置我想要哪个类的概率?

【问题讨论】:

  • 图像生成器按字母顺序遍历所有文件夹,除非明确提及。所以在你的情况下,FAKE 的概率在 0 到 0.5 之间。
  • @clinnsin 我的回答没有帮助?
  • @Frightera 是的,它很有帮助。感谢您解释 sigmoid 函数。

标签: keras deep-learning


【解决方案1】:

是属于A类的概率还是不属于A类的概率 成为 A 类(即 B)

不是真的。比如说,你得到 0.8 作为 sigmoid 的输出,所以这并不意味着每个类的网络输出概率,因为 sigmoid 输出的总和不等于 1。换句话说,输出 0.8 并不表示有这种可能性输出属于其他类别的概率为 0.2。

此外,在 二元分类 中,使用 sigmoid 网络输出 p(y=1)。然后根据概率的定义p(y=0) = 1 - p(y=1)。对于简单的二元分类,它们加起来只。

如果您想查看每个类的概率,您应该使用softmax 激活,因为它的输出总和为 1。您可以将softmax 输出解释为概率。

另一方面,这些模型不是概率模型,而是确定性模型。因此,将softmax 的输出解释为概率是很常见的,但它们之间没有数学联系。

还有没有办法设置我想要哪个类的概率?

您可以设置各种阈值,即大多为 0.5,但这取决于您的数据和问题。您可以更改阈值以查看它如何影响 AUC-ROC,通过解释更改,您可以得出最适合您的阈值。

如果要确定类,可以使用,注意0.5是阈值,可以更改:

predicted_classes = [1 * (x[0]>=0.5) for x in preds_sigmoid]

这里,如果输出大于 0.5 比我们说它属于二等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2023-03-29
    • 2018-11-23
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多