【问题标题】:how to convert logits to probability in binary classification in tensorflow?如何在张量流的二进制分类中将logits转换为概率?
【发布时间】:2017-09-26 02:36:13
【问题描述】:
logits= tf.matmul(inputs, weight) + bias

matmul 操作后,logits 是从 MLP 层派生的两个值。 我的目标是二分类,如何将logits这两个值转换为概率,包括正概率和负概率,它们的和为1?

【问题讨论】:

    标签: tensorflow deep-learning


    【解决方案1】:

    我正在为需要进一步澄清的任何人写这个答案:

    如果是二分类,应该是:

    prediction = tf.round(tf.nn.sigmoid(logit))
    

    如果是多类分类:

    prediction = tf.nn.softmax(logit)
    

    然后使用 argmax 函数可以得到概率得分最高的类的索引。

    np.argmax(prediction, 0)
    

    【讨论】:

    • 注意你也可以直接在logits上运行np.argmax
    • 对于二元分类,为什么需要tf.nn.sigmoid 来决定正/负类?当logit > 0, then probability > 0.5,则为正类;反之亦然。 tf.round(tf.nn.sigmoid()) 函数调用是不必要的。
    • @thinkdeep 如果模型返回原始logit(正负值),tf.nn.sigmoid(logit)将转换0-1之间的值,负值转换为0-0.5,正值到0.5-1,零到0.5,或者你可以称之为概率。之后,tf.round(probability) 将使用0.5 作为四舍五入到01 的阈值。这是因为外面的很多标签都使用class 0class 1 标签。这只是将正 logit 传达为正类的另一种方式,反之亦然。
    【解决方案2】:
    predictions = tf.nn.softmax(logits)
    

    【讨论】:

    • 这不是要走的路。如果您只有一个标签,即真 (1) 或假 (0),这将导致所有样本的预测概率为 1——没有你想要的
    • @emem 这不是真的。如果您的最后一层输出 logit 的值为 < 0class 0> 0class 1,例如您的最后一层是 tf.keras.layers.Dense(1) 并使用损失函数 losses.BinaryCrossentropy(from_logits=True),您需要添加 tf.nn.softmax(logit) 层在训练之后将 logit 转换为可以被人类解释的有意义的概率。
    • @MuhammadYasirroni 我指的是单值输出,你说的是两个输出。看Suleka_28的答案,这是正确答案
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2018-09-30
    • 2017-10-02
    • 2018-06-28
    • 2023-02-13
    • 1970-01-01
    相关资源
    最近更新 更多