实际上,您可以将顶部带有 softmax 分类器的模型的输出解释为类的置信度分数或概率(因为 softmax 函数对值进行归一化,使它们为正且总和为 1)。因此,当您为模型提供真实标签时[1, 0]
这意味着该样本属于类别 1 的概率为 1,属于类别 2 的概率为 0。因此,在训练期间,优化过程会尝试尽可能接近该标签,但它永远不会exactly达到[1,0](实际上由于softmax,它可能会接近[0.999999, 0.000001],但永远不会接近[1, 0])。
但这不是问题,因为我们有兴趣足够接近并了解概率最高的类别,并将其视为模型的预测。您可以通过找到具有最大概率的类的索引来轻松做到这一点:
import numpy as np
preds = model.predict(some_data)
class_preds = np.argmax(preds, axis=-1) # e.g. for [max,min] it gives 0, for [min,max] it gives 1
此外,如果您出于任何原因有兴趣将预测转换为 [0,1] 或 [1,0],您可以对值进行舍入:
import numpy as np
preds = model.predict(some_data)
round_preds = np.around(preds) # this would convert [0.87, 0.13] to [1., 0.]
Note:舍入仅适用于两个类,而不是当您有两个以上类时(例如,[0.3, 0.4, 0.3] 在舍入后将变为 [0, 0, 0])。
Note 2:由于您正在使用 Keras 的 Sequential API 创建模型,因此可以替代argmax
上面的方法你可以直接使用model.predict_classes(some_data)
这会给你完全相同的输出。