如何解决为二进制分类中的特定类调整模型的精度
我正在尝试采用本教程中的活动识别模型(代码未作大量修改,该模型保持不变):
https://www.pyimagesearch.com/2019/03/11/liveness-detection-with-opencv/
为了训练模型(保持不变),我使用的自定义数据集比教程中介绍的要大得多且用途广泛。对于未来的应用程序,我计划在其中使用该模型,我需要调整参数,以便获得接近完美的精度来预测真实面孔。为此,我采用了最简单的解决方案来调整概率的决策边界-从默认值0.5到0.97。我在训练数据集上的模型时跟踪结果–为此,我使用tensorflow.metrics:
# compiling the model and enabling precision and recall metrics
model.compile(loss="binary_crossentropy",optimizer=opt,metrics=['accuracy',metrics.Precision(thresholds=0.97),metrics.Recall(thresholds=0.97)])
# saving the model checkpoint upon meeting the best value for precision.
model_filepath = args["model"] + "_checkpoint" + ".h5"
checkpoint_callback = ModelCheckpoint(model_filepath,monitor = "val_precision",verbose=1,save_best_only=True,mode='max')
callback_list = [checkpoint_callback]
# train the network with the metrics callback
print("[INFO] training network for {} epochs...".format(EPOCHS))
H = model.fit(x=aug.flow(trainX,trainY,batch_size=BS),validation_data=(testX,testY),steps_per_epoch=len(trainX) // BS,callbacks=callback_list,epochs=EPOCHS)
但是,问题是我为相反的类(伪造的人脸)获得了所需的精度。也就是说,识别伪造面孔的精度接近1.0,但不是所需的相反类别的真实面孔(而是具有更高的查全率):training results screenshot
我想获得相同的效果,反之亦然(也就是说,我想为“真实类”实现高精度)。我该如何实现?
非常感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。