提高神经网络输出中负类的精度

问题描述

我已经训练了 CNN 来预测音调(负面、中性、正面),并且我有 4 个不同的 CNN 模型,它们的架构和数据集略有不同。这些模型在大多数测试用例中都运行良好,并提供了预期的输出代码

# 0 is for Negative
# 1 is for Neutral
# 2 is for Positive

print(model.predict(x),model.predict_classes(x))

我从所有 4 个模型中得到的输出如下。

[[1.0000000e+00 2.4311501e-12 1.3999395e-16]] [0]
[[4.4723673e-04 5.5520708e-08 9.9955267e-01]] [2]
[[5.34977562e-06 1.20891924e-29 9.99994636e-01]] [2]
[[9.9999642e-01 2.8299738e-24 3.6233271e-06]] [0]

我想做的是为正类和中性类预测神经元提供更多权重,以便我的模型比负类输出更倾向于预测正类和中性输出。我想知道操纵概率的正确方法是什么,以便模型仅在 100% 确定其为负时才输出负。因此,与其他类相比,我希望我的模型在预测 Negative 类时更精确,同时在最终预测中同等地包含所有 4 个模型的概率。

解决方法

将损失函数更改为 tf.nn.weighted_cross_entropy_with_logits()