【发布时间】:2017-09-26 02:36:13
【问题描述】:
logits= tf.matmul(inputs, weight) + bias
matmul 操作后,logits 是从 MLP 层派生的两个值。 我的目标是二分类,如何将logits这两个值转换为概率,包括正概率和负概率,它们的和为1?
【问题讨论】:
logits= tf.matmul(inputs, weight) + bias
matmul 操作后,logits 是从 MLP 层派生的两个值。 我的目标是二分类,如何将logits这两个值转换为概率,包括正概率和负概率,它们的和为1?
【问题讨论】:
我正在为需要进一步澄清的任何人写这个答案:
如果是二分类,应该是:
prediction = tf.round(tf.nn.sigmoid(logit))
如果是多类分类:
prediction = tf.nn.softmax(logit)
然后使用 argmax 函数可以得到概率得分最高的类的索引。
np.argmax(prediction, 0)
【讨论】:
np.argmax。
tf.nn.sigmoid 来决定正/负类?当logit > 0, then probability > 0.5,则为正类;反之亦然。 tf.round(tf.nn.sigmoid()) 函数调用是不必要的。
logit(正负值),tf.nn.sigmoid(logit)将转换0-1之间的值,负值转换为0-0.5,正值到0.5-1,零到0.5,或者你可以称之为概率。之后,tf.round(probability) 将使用0.5 作为四舍五入到0 或1 的阈值。这是因为外面的很多标签都使用class 0 和class 1 标签。这只是将正 logit 传达为正类的另一种方式,反之亦然。
predictions = tf.nn.softmax(logits)
【讨论】:
< 0 为 class 0 和 > 0 为 class 1,例如您的最后一层是 tf.keras.layers.Dense(1) 并使用损失函数 losses.BinaryCrossentropy(from_logits=True),您需要添加 tf.nn.softmax(logit) 层在训练之后将 logit 转换为可以被人类解释的有意义的概率。