Keras的model.predict函数的输出是什么意思?


14

我建立了一个LSTM模型来预测Quora官方数据集上的重复问题。测试标签为0或1。1表示问题对重复。使用建立模型后model.fit,我将model.predict在测试数据上使用模型进行测试。输出是一个值数组,如下所示:

 [ 0.00514298]
 [ 0.15161049]
 [ 0.27588326]
 [ 0.00236167]
 [ 1.80067325]
 [ 0.01048524]
 [ 1.43425131]
 [ 1.99202418]
 [ 0.54853892]
 [ 0.02514757]

我只显示数组中的前10个值。我不明白这些值是什么意思,每个问题对的预计标签是什么?


1
我认为您的网络存在问题..概率应该在0-1范围内..但您有1.99!,我认为您有问题..
Ghanem

Answers:


8

默认情况下,神经网络的输出永远不会是二进制的-即零或一。网络使用连续值(不是离散值)工作,以便在梯度下降的框架中更自由地优化损耗。

在这里查看类似的问题,该问题也显示了一些代码。

如果不进行任何调整和缩放,就其标称值而言,网络的输出可能会落在输入范围内的某个位置。在您的情况下,该值大约在0到2之间。

现在,您可以编写一个函数,根据某个阈值将上面的值转换为0或1。例如,将值缩放到[0,1]范围内,然后,如果该值小于0.5,则返回0,如果大于0.5,则返回1。


谢谢,我也考虑过使用阈值对标签进行分类。但是,确定阈值的依据应该是什么?
Dookoto_Sea '18

@Dookoto_Sea你必须自己决定它
杰里米布莱恩

@Dookoto_Sea请注意,如果您的标签是0或1,你的价值应该在这个范围内,具有[0,2]是耐人寻味,你需要改变你的模型输出的预测值秤
杰里米布莱恩

7

如果这是分类问题,则应将网络更改为具有2个输出神经元。

您可以使用以下方法将标签转换为一键编码的向量

y_train_binary = keras.utils.to_categorical(y_train, num_classes)
y_test_binary = keras.utils.to_categorical(y_test, num_classes)

然后确保您的输出层具有两个具有softmax激活功能的神经元。

model.add(Dense(num_classes, activation='softmax'))

这将导致您model.predict(x_test_reshaped)成为列表数组。内部列表是实例属于每个类的概率。这将合计为1,显然,已确定的标签应该是具有最高概率的输出神经元。

Keras将此包含在其库中,因此您无需自己进行此比较。您可以使用直接获取类标签model.predict_classes(x_test_reshaped)


3
“如果这是分类问题,则应将网络更改为具有2个输出神经元。”对不起,Jah,但他不应该这样做,他可以使用一个神经元和S型神经元来代替softmax功能。
加纳姆

@Minion,这两种方法本质上是等效的,否则将需要对单个输出神经元执行的阈值隐式嵌入到网络中。从而提供二进制输出。
JahKnows

1
是的,我知道..我之所以评论是因为他提到:“应该将您的网络更改为具有2个输出神经元。” .. thanx
Ghanem

1

预测基于您作为训练输出和激活功能提供的信息。

例如,对于0-1输入和具有二进制交叉熵损失的输出使用S型激活函数,您将获得1的概率。根据在任一方向上做出错误决策的成本,您可以然后决定如何处理这些概率(例如,如果概率> 0.5或当概率大于0.1时已经预测类别“ 1”)。

-

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.