Python Tensorflow 1.4 tf.metrics.auc用于auc计算
我试图在我的模型的训练时间记录AUC 根据标准,Python Tensorflow 1.4 tf.metrics.auc用于auc计算,python,tensorflow,auc,Python,Tensorflow,Auc,我试图在我的模型的训练时间记录AUC 根据标准,tf.metric.auc需要一个标签和预测,两者形状相同 但在我的二进制分类中,标签是一个一维张量,只包含类。而预测是二维的包含每个数据点的每类概率 在这种情况下,如何计算AUC 让我们看看函数中的参数: 标签:形状与预测匹配的张量。将被强制转换为bool 预测:任意形状的浮点张量,其值在范围[0,1]内 此操作已采用二进制分类。也就是说,标签中的每个元素都说明了单个样本的类别是“正”还是“负”。它不是一个1-hot向量,它需要一个元素数与排
tf.metric.auc
需要一个标签
和预测
,两者形状相同
但在我的二进制分类中,标签
是一个一维张量,只包含类。而预测
是二维的包含每个数据点的每类概率
在这种情况下,如何计算AUC 让我们看看函数中的参数:
:形状与预测匹配的张量。将被强制转换为标签
bool
:任意形状的浮点张量,其值在范围预测
内[0,1]
标签
中的每个元素都说明了单个样本的类别是“正”还是“负”。它不是一个1-hot向量,它需要一个元素数与排他类数相同的向量
类似地,predictions
以某种程度的确定性(有些人可能称之为概率)表示预测的二进制类,每个元素也应该引用一个样本。它不是softmax向量
如果概率来自一个神经网络,它有2个神经元的完全连接层,在网络的头部有一个SOFTMax激活,考虑用一个神经元和乙状结肠激活来代替它。现在可以将输出直接输入到
tf.metrics.auc
否则,可以只对预测张量进行切片,只考虑正类,这将表示二进制类是相同的:
auc_value, auc_op = tf.metrics.auc(labels, predictions[:, 1])
你没有试过用
tf.argmax
从概率中获取实际预测吗?据我所知,要计算AUC,你需要知道所有类的概率,而不仅仅是最大概率的类。正确的?在二元分类器中,你可以计算其他类的概率,但不能计算多类的概率。您可能希望获取“正”类的概率:prob[:,1]
因此,我没有只传递标签,而是将其转换为tf.one\u hot
,从而将其维度更改为[batch*n\u classes]。现在概率也是[batch*n_类]。AUC给出了一些值,但不确定它是否正确:/听起来不对。您是否尝试过转换二维概率张量?您是否建议始终传递Class==1
的概率,而不考虑标签?@random_28当我们处理二进制分类时,p(Class=0)
的概率无论如何都应该是1-p(Class=1)
。这里不需要类为负的概率。我理解,但是没有提到在哪里通过p(class=1)
:我们怎样才能确认呢?因为如果我们将p(Class=label[i])
传递给i
th数据点,这也会起作用。那是因为接口已经假设预测是一个二进制分类。ROC曲线是通过对这些值应用多个阈值来构建混淆矩阵来计算的。除非您处理的是多类分类,否则采用p(class=1)
就可以了。还请注意,您可以使用构建整个ROC曲线,并亲自查看结果。