多类别分类指标查找2D张量每行的argmax,并在Keras后端K中将它们改为1用于TP,FP,FN计算。

2024-06-10 14:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多类分类问题。我的keras模型在预测结束时给出了连续向量。你知道吗

下面是我在numpy-based中的代码,用于从模型.预测. 所以,我尝试在keras度量中计算TP,FP,FN,我可以从keras.evaluate得到。你知道吗

使用的Numpy代码段:

#   y_true is one hot of classes.

# Continuos values
y_pred_continuos = model.predict(xfeature)    
# Discrete Values
y_pred = np.zeros_like(y_pred_continuos)
y_pred[np.arange(len(y_pred_continuos)), y_pred_continuos.argmax(1)] = 1   

cur_TP = np.multiply(y_true,y_pred)
cur_FP = y_pred - cur_TP
cur_FN = y_true - cur_TP
cur_TP = cur_TP.sum(axis=0)
cur_FP = cur_FP.sum(axis=0)
cur_FN = cur_FN.sum(axis=0)

是的,你的pred将在keras Custom Metrics中可用。
在凯拉斯,我试过:


from keras import backend as K
import numpy as np
cy_true = np.array([[0,0,1,0],[0,0,0,1]])
cy_pred = np.random.normal(size=8).reshape(2,4)

y_true = K.variable(cy_true,)
y_pred = K.variable(cy_pred)
y_pred_discrete = K.zeros_like(y_pred)

我不知道如何循环找到一个热的连续向量。你知道吗

同样使用scikit learn的分类报告,我也可以得到相同的结果。要做到这一点,我必须通过保存预测和分析来运行Keras度量。你知道吗

但我希望它们作为keras度量,找到TP,FP,FN,TN来进行多类分类。你知道吗

我为多标签分类编写了它们,其中我只对预测进行排序,然后选择top k

但在多类的情况下,我不知道如何循环一个keras张量。你知道吗

如果我在Keras Metric本身中找到它们,那么我可以使用BaseAccumulator在Keras中编写一个回调,以在批中累积值,并且在epoch结束时,我也可以得到Metric F1,也可以用来监视我的训练过程。你知道吗


Tags: true度量np分类kerasfnsumfp