Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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 自定义TensorFlow度量:给定假阳性率下的真阳性率_Python_Tensorflow_Keras - Fatal编程技术网

Python 自定义TensorFlow度量:给定假阳性率下的真阳性率

Python 自定义TensorFlow度量:给定假阳性率下的真阳性率,python,tensorflow,keras,Python,Tensorflow,Keras,我有一个二元分类问题,背景类别(bg)=0,信号类别(sig)=1,为此我正在训练NNs。出于监控目的,我正在尝试使用TensorFlow后端在Keras中实现一个自定义度量,它执行以下操作: 1) 计算我的NN输出上的阈值,该阈值将导致X的假阳性率(将bg分类为信号)(在本例中,X=0.02,但它可以是任何值) 2) 计算此阈值下的真实阳性率 给定numpy数组y_true,y_pred,我将编写如下函数: def eff_at_2percent_metric(y_true, y_pred):

我有一个二元分类问题,背景类别(bg)=0,信号类别(sig)=1,为此我正在训练NNs。出于监控目的,我正在尝试使用TensorFlow后端在Keras中实现一个自定义度量,它执行以下操作:

1) 计算我的NN输出上的阈值,该阈值将导致X的假阳性率(将bg分类为信号)(在本例中,X=0.02,但它可以是任何值)

2) 计算此阈值下的真实阳性率

给定numpy数组y_true,y_pred,我将编写如下函数:

def eff_at_2percent_metric(y_true, y_pred):
    #Find list of bg events
    bg_list = np.argwhere(y_true < 0.5)
    #Order by the NN output
    ordered_bg_predictions = np.flip(np.sort(y_pred[bg_list]),axis=0)
    #Find the threshold with 2% false positive rate
    threshold = ordered_bg_predictions[0.02*round(len(ordered_bg_list))]

    #Find list of signal events
    sig_list = np.argwhere(y_true > 0.5)
    #Order these by NN output
    ordered_sig_predictions = np.sort(y_pred[sig_list])
    #Find true positive rate with this threshold
    sig_eff = 1 - np.searchsorted(ordered_sig_predictions,threshold)/len(ordered_sig_predictions)

    return sig_eff
def eff_at_2percent_度量(y_true,y_pred):
#查找bg事件列表
bg_list=np.argwhere(y_true<0.5)
#按NN输出排序
有序预测=np.flip(np.sort(y_pred[bg_list]),轴=0)
#找到假阳性率为2%的阈值
阈值=有序bg预测[0.02*轮(len(有序bg列表))]
#查找信号事件列表
sig_list=np.argwhere(y_true>0.5)
#通过NN输出对其进行排序
有序的信号预测=np.sort(y\u pred[sig\u list])
#使用此阈值查找真实阳性率
sig_eff=1-np.searchsorted(有序sig_预测,阈值)/len(有序sig_预测)
返回信号有效

当然,这不起作用,因为要实现自定义度量,y_true和y_pred应该是张量流张量,而不是numpy数组。有什么方法可以让这项工作正确吗?

有一个指标,我认为是等效的(特异性是1减去FPR)。

完美,这正是我想要的!现在我只需要弄清楚如何在Keras中实现tf指标。已经有一些用于此的stackoverflow线程。谢谢另外,我还发现我可以用自定义回调来做我需要的一切。