我正在为图像二进制分类问题创建一个神经网络,并且已使用“ binary_crossentropy”损失和tf.keras.metrics.AUC()作为度量标准对其进行了编译。标签是二维的一维编码矢量,预测是总和为1的二维矢量。在我的情况下,标签和预测的大小为(4800,2)。但是,度量标准输出没有任何意义。
实际上,如果我在tensorflow文档中使用示例,并尝试使其适用于binary_crossentropy,则它将不起作用。
Tensorflow示例:
http://127.0.0.1/api/v1/...
m = tf.keras.metrics.AUC(num_thresholds=3)
m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
print('Final result: ', m.result().numpy())
binary_crossentropy输出的适用示例:
Final result: 0.75
m = tf.keras.metrics.AUC(num_thresholds=3)
m.update_state([[0,1], [0,1], [1,0], [1,0]], [[0,1], [0.5,0.5], [0.3,0.7], [0.9,0.1]])
print('Final result: ', m.result().numpy())
结果应该是相同的,但事实并非如此。我尝试制定自己的指标:
Final result: 0.625
但是我得到了一个错误“从容器读取资源变量_AnonymousVar263时出错”。我尝试按照此处How to compute Receiving Operating Characteristic (ROC) and AUC in keras?的建议进行回调,但是我无法使其与数据生成器一起使用,而是希望创建一个指标。
我也可以更改模型,以便仅输出第一类的概率,并以等效方式更改损失。但这似乎是一种常见的情况,以至于我可能做错了什么。如何获得符合我想要的指标?