Tensorflow 2.0 - 这些模型预测是否代表概率?

Tensorflow 2.0 - do these model predictions represent probabilities?

我有一个非常简单的 Tensorflow 2 Keras 模型来对某些数据进行惩罚逻辑回归。我希望得到每个 class 的概率,而不仅仅是 [0 或 1] 的预测值。

我想我得到了我想要的,但只是想确保这些数字是我认为的那样。我使用了 Tensorflow.keras 中的 model.predict_on_batch() 函数,但文档只是说这提供了 预测 numpy 数组。但是我相信我得到 概率 ,但我希望有人可以确认。

模型代码如下所示:

feature_layer = tf.keras.layers.DenseFeatures(features)                                                                    

model = tf.keras.Sequential([                                                                                              
    feature_layer,                                                                                                         
    layers.Dense(1, activation='sigmoid', kernel_regularizer=tf.keras.regularizers.l1(0.01))                               
])                                                                                                                         
model.compile(optimizer='adam',                                                                                            
              loss='binary_crossentropy',                                                                                  
              metrics=['accuracy'])      

predictions = model.predict_on_batch(validation_dataset)

print('Predictions for a single batch.')
print(predictions)

所以我得到的预测看起来像:

Predictions for a single batch.                                                                             
tf.Tensor(                                                                                       
[[0.10916319]                                                                                                           
 [0.14546806]                                                               
 [0.13057315]                                                                                                             
 [0.11713684]                                                                                    
 [0.16197902]                                                                                                              
 [0.19613355]                                                                                                             
 [0.1388464 ]                                                                                                   
 [0.14122346]
 [0.26149303]
 [0.12516734]
 [0.1388464 ]
 [0.14595506]
 [0.14595506]]

现在用于逻辑回归中的预测,该预测将是 0 或 1 的数组。但是因为我正在获取浮点值。但是,当示例实际为 0 的概率和示例为 1 的概率时,我只是得到一个值。所以我想像每行或示例有 2 个概率的数组。当然,Probability(Y = 0) + Probability(Y = 1) = 1,所以这可能只是一些简洁的表示。

那么,下面数组中的值是否表示示例或 Y = 1 或其他值的概率?

此处表示的值:

tf.Tensor(                                                                                       
[[0.10916319]                                                                                                           
 [0.14546806]                                                               
 [0.13057315]                                                                                                             
 [0.11713684]                                                                                    
 [0.16197902]                                                                                                              
 [0.19613355]                                                                                                             
 [0.1388464 ]                                                                                                   
 [0.14122346]
 [0.26149303]
 [0.12516734]
 [0.1388464 ]
 [0.14595506]
 [0.14595506]]
  1. 你的每一个class对应的概率是多少

  2. 由于您在最后一层使用了 sigmoid 激活,这些将 在 [0, 1].

  3. 范围内
  4. 您的模型非常浅(层数少),因此这些预测概率在 class 之间非常接近。我建议你多加几层。

结论

为了回答您的问题,这些是概率,但仅取决于您选择的激活函数 (sigmoid)。如果您使用 tanh 激活,这些将在 [-1,1] 范围内。

请注意,由于使用了 binary_crossentropy 损失,每个 class 的这些概率为 "binary" - 即 class 1 存在的概率为 10.92%,存在概率为 89.08%不是,其他 classes 依此类推。如果您希望预测遵循概率规则 (sum = 1),那么您应该考虑 categorical_crossentropy.