如何在Keras中创建返回多维值的指标?

我在使用Keras解决一个多分类问题。由于我的数据非常不平衡,我尝试创建类似于混淆矩阵的东西。我的数据集非常大,并且以HDF5格式保存,因此我使用HDF5Matrix来获取X和Y,这使得scikit-learn的混淆矩阵不再适用(据我所知)。我看到可以保存预测和真实标签,或者输出每个标签的错误率,然而,一个更优雅的解决方案是创建一个累积(预测,真实)标签对的多维指标(类似于混淆矩阵)。我使用了以下回调函数,尝试窥探每个批次/纪元的情况:

from keras.callbacks import LambdaCallbackbatch_print_callback = LambdaCallback(on_batch_end=lambda batch, logs: print(logs),on_epoch_end=lambda epoch, logs: print(logs))

但它只能累积单一值(通常是某种平均值)。

我还尝试查看是否可以返回y_pred/y_true,如下所示(尝试看看是否可以在日志中打印多维值):

def pred(y_true, y_pred):     return y_preddef true(y_true, y_pred):    return y_true

然而,它并没有如我所期望的那样返回多维值。所以,基本上,我的疑问是,我能否使用Keras来累积多维指标?


回答:

据我所知,这是不可行的,因为在返回张量值之前,会应用K.mean。我在keras的GitHub上发布了一个关于此的问题。我想到的最佳设计是为混淆矩阵中的每个单元格设置一个指标,并创建一个收集这些指标的回调函数,这个想法受到问题中提到的线程的启发。一个有点工作的解决方案可以在这里找到

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注