我使用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手动测试的功能进行重写。