使用sklearn在keras中创建自定义指标

时间:2018-11-21 10:14:06

标签: python numpy tensorflow scikit-learn keras

背景

我使用keras(具有tensorflow后端)创建了一个简单模型

model = Sequential()
...
model.compile(loss='mse', optimizer=Adam(), metrics=[average_precision])

然后我想根据我的自定义指标来尽早停止搜索

model.fit(x=x_train, y=y_train,
      ...
      callbacks=[EarlyStopping(monitor='average_precision', mode='max', patience=3)])
到目前为止,一切都很好。但是问题是average_precision是使用average_precision_score中的sklearn.metrics实现的:

def average_precision(y_true, y_pred):
    return average_precision_score(y_true, y_pred, average="micro")

它仅接受numpy数组。但是在训练过程中,函数会加载张量。

问题

如何使用sklearn函数来实现自定义指标。

备注:

我不需要实现损失,因此功能不必是可区分的。

什么不起作用

为了在函数中获取numpy数组,我尝试使用一些session / run / eval来解决问题,但是我没有成功。

我正在使用的解决方法,但我不满意:

我写了自己的Early Stopping回调。我在其构造函数中以numpy数组的形式向其提供了验证数据。这种解决方案有很多缺点,我希望找到更优雅的方法。

我不想做什么:

使用keras后端通过sklearn手动测试的功能进行重写。

0 个答案:

没有答案