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

时间:2019-12-13 00:56:09

标签: python tensorflow keras logistic-regression

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

我想我已经得到了想要的,但是只是想确保这些数字与我想的一样。我使用了Tensorflow.keras的model.predict_on_batch()函数,但是文档只是说它提供了{strong>预测的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个概率的数组。当然,概率(Y = 0)+概率(Y = 1)= 1,所以这可能只是一些简洁的表示。

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

1 个答案:

答案 0 :(得分:2)

此处表示的值:

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. 是对应于您每个类别的概率。

  2. 由于您在最后一层使用了sigmoid激活,因此这些     处于[0,1]范围内。

  3. 您的模型很浅(几层),因此这些预测概率在类之间非常接近。我建议您添加更多层。

结论

要回答您的问题,这些是概率,但这仅是由于您选择了激活功能(sigmoid)。如果您使用tanh激活,则它们的范围为[-1,1]。

请注意,由于使用binary_crossentropy损失,因此每个类别的这些概率都是“二进制”的,也就是类别1存在的概率为10.92%,而类别1不存在的概率为89.08%,以此类推。如果您希望预测遵循概率规则(总和= 1),则应考虑categorical_crossentropy