我希望创建一个自定义的目标函数来训练Keras深度神经网络。我正在研究不平衡数据的分类,并且在scikit-learn中经常使用F1分数。因此,我想到了将F1指标反转(1-F1分数)以将其作为Keras的损失函数/目标,以便在训练过程中最小化:
(from sklearn.metric import f1_score)
def F1Loss(y_true, y_pred):
return 1. - f1_score(y_true, y_pred)
然而,scikit-learn中的
f1_score
方法需要使用numpy数组或列表来计算F1分数。我发现需要使用.eval()
将张量Tensor转换为其numpy数组表示形式,这需要一个TensorFlow会话来执行此任务。我不知道Keras使用的会话对象是什么。我尝试使用下面的代码,假定Keras后端在某个地方定义了其自己的会话对象,但这也没有起作用。
from keras import backend as K
K.eval(y_true)
诚然,由于我目前并不真正理解Keras或Tensorflow的更深层次工作原理,所以这只是一次瞎猜。
我的问题是:如何将y_true
和y_pred
张量评估为它们的numpy数组对应项?