【问题标题】:keras apply threshold for loss functionkeras 为损失函数应用阈值
【发布时间】:2019-12-28 20:12:24
【问题描述】:

我正在开发一个 Keras 模型。我的数据集严重不平衡,所以我想为训练和测试设置一个阈值。如果我没记错的话,在进行反向传播时,神经网络会检查预测值与原始值并计算误差,并根据误差为神经元设置新的权重。

据我所知,Keras 使用 0.5 作为阈值。我知道有一些方法可以将自定义指标(如召回率和精度)与自定义阈值一起应用,但该阈值仅用于计算召回率,而不应用于损失函数。更清楚一点,如果我想设置 0.85 作为我的阈值,神经网络将使用 0.5 作为阈值来计算损失,使用 0.85 作为召回。

还有什么方法可以设置这个训练阈值吗?

【问题讨论】:

  • Keras 不使用任何损失阈值。

标签: python tensorflow keras neural-network


【解决方案1】:

没有所谓的损失阈值。

损失函数必须是“可微的”,因此它必须是“连续的”函数。
您可以做的最好的事情是设置“类权重”,例如这些示例:Higher loss penalty for true non-zero predictions

【讨论】:

  • 谢谢。我不知道在损失函数中,使用的是预测值本身而不是四舍五入的值。
【解决方案2】:

除了类权重...

  1. 您可以使用带阈值参数的度量函数:
    model.compile(..., metrics=[tf.keras.metrics.BinaryAccuracy(threshold=0.5)])

  2. 您可以在最后一层使用 sigmoid 激活并在该阈值之后手动选择:

pred_labels = np.where(y_pred>0.5, 1, 0)
score = sklearn.metrics.accuracy_score(pred_labels, labels)

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 2018-07-22
    • 2018-10-10
    • 2020-06-06
    • 2019-04-11
    • 1970-01-01
    • 2018-10-21
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多