【问题标题】:Get a single value prediction from a 2-class softmax output从 2 类 softmax 输出中获取单值预测
【发布时间】:2018-10-08 05:45:16
【问题描述】:

我有一个二元分类问题,但最后有一个Dense(2, activation='softmax') 层。所以我得到了像[0.2, 0.8][1.0, 0.0] 这样的预测。我是否正确计算得到的单值预测?

single_value_prediction = predictions[predicted_class] if predictions[1] > predictions[0] else 1 - predictions[predicted_class]

所以[0.2, 0.8] 会导致0.8[1.0, 0.0]0.0 中?

谢谢!

【问题讨论】:

  • 那么,你得到了列表,并对其进行排序以输出具有最高 softmax 分数的类,对吧?
  • 如果你有Binary分类问题,你可以直接使用输出层的单值Dense(1,activation='softmax'),你为什么有兴趣单独做
  • 如果两者都返回 0.5,在这种情况下你需要一个阈值

标签: python machine-learning keras deep-learning


【解决方案1】:

得到预测后使用:

preds = model.predict(test_data)

preds 数组的形状为(n_samples, 2)。现在要查找预测的类,您可以轻松使用np.argmax()

preds_classes = np.argmax(preds, axis=-1)

或者,如果您的模型是顺序模型,即keras.models.Sequential,(而不是使用函数式 API 定义的模型,即keras.model.Model),您可以直接使用predict_classes() 方法:

preds_classes = model.predict_classes(test_data)

如果您想找到预测类别的概率(即概率最高的类别),那么您可以使用np.max()

preds_class_prob = np.max(preds, axis=-1) 

【讨论】:

    【解决方案2】:

    如果您希望“[0.2, 0.8] 将导致 0.8 和 [1.0, 0.0] 在 0.0 中”,您可以尝试 prediction = model.predict(data)[:, 1]

    如果您想同时将概率转换为类,请尝试prediction = model.predict(data)[:, 1] > 0.5。或者按照@today 的建议使用 np.argmax。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2019-06-11
      • 2019-11-15
      • 2016-06-21
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多