我有问题。我正在将Keras与TensorFlow后端一起用于图像识别。分为正面任务和负面任务两类。
我正在使用具有密集层(不是冻结)的预训练模型(具有冻结权重)。
我报告了一个问题:经过100个训练后,我得到了以下结果:
Epoch 98/100 488/488 [=============================]-222秒 454毫秒/步-损耗:0.0774-精度:0.9720-灵敏度:0.9746- 特异性:0.9683-val_loss:0.0660-val_acc:0.9697- val_灵敏度:0.4412-val_特异性:0.5368
时代99/100 488/488 [=============================]-221秒453ms /步-损耗: 0.0791-acc:0.9687-灵敏度:0.9729-特异性:0.9647-val_loss:0.0930-val_acc:0.9570-val_灵敏度:0.5428- val_specificity:0.4245
时代100/100 488/488 [=============================]-221秒453ms /步-损耗:0.0775- acc:0.9693-敏感性:0.9715-特异性:0.9655-val_loss: 0.0751-val_acc:0.9684-val_灵敏度:0.4482-val_specificity:0.5285
我的准确性为96%,损失为0.0751(二进制交叉熵),敏感性和特异性均较低。类不平衡可能是一个问题,但是我有2600个测试实例,其中正类有1302,负类有1298。
如果我们的准确度为+ 90%,则可以预期,另外两个指标之一可以提供良好的结果分类。如果这些指标用于评估每个班级的命中率,并且我们具有很高的准确性,那么如何为两个指标获得较低的价值?
我不知道这里发生了什么,有人可以帮助我吗?
以下是我的敏感性和特异性功能:
def sensitivity(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
return true_positives / (possible_positives + K.epsilon())
def specificity(y_true, y_pred):
true_negatives = K.sum(K.round(K.clip((1-y_true) * (1-y_pred), 0, 1)))
possible_negatives = K.sum(K.round(K.clip(1-y_true, 0, 1)))
return true_negatives / (possible_negatives + K.epsilon())
我为我的英语不好对不起。谢谢您的帮助!
我尝试对图像进行二进制分类。我使用转移学习,并添加了两个评估模型的指标:敏感性和特异性。
如果在具有平衡验证数据的二进制分类任务中,我们具有很高的准确性,那么我们希望在验证敏感性或特异性方面获得很好的结果。模型或指标评估存在一些不一致之处。
编辑9/9 我尝试使用另一种转移学习或简单模型,得到了相同的结果。我真的不明白这是什么。
Epoch 100/100 488/488 [=============================]-217s 445ms /步-损耗: 0.0575-acc:0.9767-灵敏度:0.9793-特异性:0.9737-val_loss:0.0731-val_acc:0.9653-val_灵敏度:0.4904-val_specificity:0.4852