TensorFlow Sigmoid 激活函数作为输出层 - 值解释

数据挖掘 Python 喀拉斯 张量流 激活函数
2021-10-05 18:33:06

我的 TensorFlow 模型具有以下结构。它旨在解决标签为 0 或 1 的二元分类问题。输出层使用具有 1 个输出的 sigmoid 激活函数。

model = keras.Sequential([
    layers.Dense(10, activation='relu', input_shape=[len(train_dataset.keys())]),
    layers.Dense(1, activation='sigmoid')
  ])
  optimizer = 'adam'

  model.compile(loss='binary_crossentropy',
                optimizer=optimizer,
                metrics=[tf.keras.metrics.Precision(), tf.keras.metrics.Recall(), tf.keras.metrics.Accuracy()])

给出的输出是一个 dtype=float32 数字数组,位于 0 和 1 之间。

array([[9.5879245e-01],
       [3.6847022e-01],
       [3.4174323e-04],
       ...,
       [2.6283860e-03],
       [3.2045375e-04],
       [1.0798702e-03]], dtype=float32)

Tensorflow 教程指出 “使用 sigmoid 激活函数,该值是 0 到 1 之间的浮点数,表示概率或置信水平”。 https://www.tensorflow.org/tutorials/keras/text_classification

我的问题是:

我是否将输出中的浮点值解释为:

  1. “它属于第一类标签的可能性有多大——在这种情况下,0 类是我的第一类标签?” 例如model.predict()产量0.99998,因此有 99% 的机会属于我的第一类标签(0 类)和 1% 的属于另一个类(1 类)。

或者

  1. “输出越接近0 类model.predict()的可能性0.0越大,输出越接近1 类的可能性越大1.0
2个回答

简而言之,model.predict()函数的值被解释为选项 2 中提到的。

为了澄清,让我们假设我们正在谈论垃圾邮件检测应用程序。标签0表示文本/电子邮件不是垃圾邮件,标签1表示文本/电子邮件是垃圾邮件。

假设在运行函数之后model.predict(),我们得到了 value 0.9899那么我们可以将其解释为:

  • 给定文本/电子邮件成为垃圾邮件的几率为 98.99%
  • 给定文本/电子邮件不是垃圾邮件的机会是 1.01%

通常,当我们谈论二进制分类问题时,我们会经常使用标签0&1来表示类。因此,预测值更接近0意味着它更有可能属于该类0(在我们的示例中,该类0表示文本/电子邮件不是垃圾邮件。)。同样,如果预测值更接近1意味着它更有可能属于该类1(在我们的示例中,该类1表示文本/电子邮件是垃圾邮件。)

请检查这个答案,看看它是否有帮助。不知何故,我觉得你得到的是预测概率而不是预测本身

https://stackoverflow.com/questions/40002084/how-to-output-a-prediction-in-tensorflow