Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多类分类度量沿2d张量的每一行查找argmax,并在keras-backed K中将其更改为1,以进行TP、FP、FN计算_Python_Keras - Fatal编程技术网

Python 多类分类度量沿2d张量的每一行查找argmax,并在keras-backed K中将其更改为1,以进行TP、FP、FN计算

Python 多类分类度量沿2d张量的每一行查找argmax,并在keras-backed K中将其更改为1,以进行TP、FP、FN计算,python,keras,Python,Keras,我有一个多类分类问题。我的keras模型在预测结束时给出了连续向量 这是我在numpy中基于model.predict进行评估时使用的代码。 因此,我尝试在keras度量本身中计算TP、FP、FN,我可以从keras.evaluate中得到 使用的Numpy代码段: # y_true is one hot of classes. # Continuos values y_pred_continuos = model.predict(xfeature) # Discrete Valu

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

这是我在numpy中基于model.predict进行评估时使用的代码。 因此,我尝试在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中可用。
在Keras,我尝试过:


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

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

但在多类情况下,我不知道如何循环keras张量


如果我在Keras度量本身中找到它们,那么我可以在Keras中使用BaseCumperator编写一个回调,以在批次中累积值,并且在历元结束时,我也可以得到度量F1,我也可以使用它来监控我的训练过程。

连续向量是什么意思?如果您指的是一个热编码,那么只需使用获取“tru”值。例如
a=[[0,0,1],[1,0,0]]
np.argmax(a)将返回[2,0]我的意思是连续值,而不是一个热编码值。当然,我现在使用numpy,但单独使用,而不是在Keras度量中使用。我想要一种方法,将TP、FP、FN作为keras度量,如keras“精度”。您可以使用scikit学习中的分类报告,也可以使用scikit学习绘制混淆矩阵。只需在谷歌上键入这些单词,即可找到相应的文档。我希望它们使用Keras度量,这样,在训练期间,Keras epoch中的一批预测的相同计算就不会重复。否则,预测部分将在外部再次发生。你所说的连续向量是什么意思?如果您指的是一个热编码,那么只需使用获取“tru”值。例如
a=[[0,0,1],[1,0,0]]
np.argmax(a)将返回[2,0]我的意思是连续值,而不是一个热编码值。当然,我现在使用numpy,但单独使用,而不是在Keras度量中使用。我想要一种方法,将TP、FP、FN作为keras度量,如keras“精度”。您可以使用scikit学习中的分类报告,也可以使用scikit学习绘制混淆矩阵。只需在谷歌上键入这些单词,即可找到相应的文档。我希望它们使用Keras度量,这样,在训练期间,Keras epoch中的一批预测的相同计算就不会重复。否则,预测部分将在外部再次发生。