我有一个非常简单的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或其他的概率?
答案 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]]
是对应于您每个类别的概率。
由于您在最后一层使用了sigmoid
激活,因此这些
处于[0,1]范围内。
您的模型很浅(几层),因此这些预测概率在类之间非常接近。我建议您添加更多层。
要回答您的问题,这些是概率,但这仅是由于您选择了激活功能(sigmoid
)。如果您使用tanh
激活,则它们的范围为[-1,1]。
请注意,由于使用binary_crossentropy
损失,因此每个类别的这些概率都是“二进制”的,也就是类别1存在的概率为10.92%,而类别1不存在的概率为89.08%,以此类推。如果您希望预测遵循概率规则(总和= 1),则应考虑categorical_crossentropy
。