我正在开发Keras模型。我的数据集严重不平衡,因此我想为训练和测试设置一个阈值。如果我没记错的话,在进行向后传播时,神经网络会用原始值检查预测值并计算误差,然后根据误差为神经元设置新的权重。
据我所知,Keras使用0.5作为阈值。我知道可以通过自定义阈值来应用自定义指标(如召回率和精度),但是该阈值仅用于计算召回率,而不适用于损失函数。更明确地说,如果我要将阈值设置为0.85,则神经网络将使用0.5作为阈值来计算损失,而将0.85作为召回率。
还有什么方法可以设置此培训门槛?
答案 0 :(得分:1)
没有损失阈值之类的东西。
损失函数必须是“可微”的,因此它必须是“连续”函数。
最好的办法是设置“班级权重”,例如以下示例:Higher loss penalty for true non-zero predictions
答案 1 :(得分:0)
除了班级权重...
您可以使用带有阈值参数的度量函数:
model.compile(..., metrics=[tf.keras.metrics.BinaryAccuracy(threshold=0.5)])
您可以在最后一层使用 sigmoid 激活并在该阈值之后手动选择:
pred_labels = np.where(y_pred>0.5, 1, 0)
score = sklearn.metrics.accuracy_score(pred_labels, labels)