我想从混淆矩阵中得到UAR(未加权精度)来监控验证数据的UAR。然而,张量的处理是困难的。在
https://www.davidtvs.com/keras-custom-metrics/
我确实参考了这个站点,并尝试在Keras中创建自己的度量标准。
我通过使用第一个方法同时使用Keras支持的ModelCheckpoint
和{
model.compile(loss='categorical_crossentropy',optimizer=adam, metrics=['accuracy', uar_accuracy])
但是,我不知道如何定义uar_accuracy
函数。在
此结果返回每个类的右侧数据数的平均值。 但我不需要正确数据数量的平均值,而是每个类的正确概率的平均值。
我如何实施?在
我已经为numpy类型实现了以下内容,而不是使用sklearn.metrics
和collections
库的张量类型
def get_accuracy_and_cnf_matrix(label, predict):
uar = 0
accuracy = []
cnf_matrix = confusion_matrix(label, predict)
diag=np.diagonal(cnf_matrix)
for index,i in enumerate(diag):
uar+=i/collections.Counter(label)[index]
# cnf_marix (Number of corrects -> Accuracy)
cnf_matrix = np.transpose(cnf_matrix)
cnf_matrix = cnf_matrix*100 / cnf_matrix.astype(np.int).sum(axis=0)
cnf_matrix = np.transpose(cnf_matrix).astype(float)
cnf_matrix = np.around(cnf_matrix, decimals=2)
# WAR, UAR
test_weighted_accuracy = np.sum(label==predict)/len(label)*100
test_unweighted_accuracy = uar/len(cnf_matrix)*100
accuracy.append(test_weighted_accuracy)
accuracy.append(test_unweighted_accuracy)
return np.around(np.array(accuracy),decimals=2), cnf_matrix
您可以使用
tf.reduce_sum
来计算混淆矩阵中每一行的总和。这对应于每个类的数据点总数。然后用行和除以对角线元素,以计算每个类正确预测的示例的比率。在相关问题 更多 >
编程相关推荐