我想创建一个自定义目标函数来训练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)
但是,scikitlearn的这个f1_score
方法需要numpy数组或列表来计算F1分数。我发现张量需要使用.eval()
对其numpy数组进行计算,这需要一个TensorFlow会话来执行此任务。在
我不知道Keras使用的会话对象。我尝试过使用下面的代码,假设Keras后端在某个地方定义了自己的会话对象,但这也不起作用。在
^{pr2}$诚然,这是一个黑暗的尝试,因为我现在还不真正理解Keras或Tensorflow a的深层工作原理。在
我的问题是:如何计算y_true
和y_pred
张量,使之与numpy数组对应?
你的问题是一个典型的问题,在执行一个不连续的目标。这是不可能的,因为有两个原因:
如果您已经用numpy数组格式预测和实际张量,那么我想您可以使用以下代码片段:
在keras,我想你可以用这个:
^{pr2}$其中train_generator和val_generator在培训过程中生成培训和验证数据,并且在培训期间打印损失和精度。在
希望这能帮助。。。在
相关问题 更多 >
编程相关推荐