tf.keras.metrics.Accuracy 计算预测与标签的匹配程度(准确率) 作者:马育民 • 2020-05-28 10:10 • 阅读:10626 # 介绍 计算预测与标签的匹配程度,即:判断预测的准确率 该指标用于分类、逻辑回归 ### 算法 预测样本与标签样本匹配的数量 / 预测样本(标签样本)的总数 如: ``` 标签样本:[2, 3, 3, 4] 预测样本:[1, 4, 3, 4] 只有后面2个数字匹配,所以准确率为:2/4=0.5 ``` ### 常用别名 - tf.metrics.Accuracy ### model.compile(metrics ) 在 `model.compile(metrics )`,可以通过字符串`"accuracy "`或`"acc"`指定指标 # 方法 ### 创建对象 ``` tf.keras.metrics.Accuracy( name='accuracy', dtype=None ) ``` ### update_state() 传入 y_true,y_pred ,且形状相同 ``` update_state( y_true, y_pred, sample_weight=None ) ``` ##### 参数: - y_true:ground truth,即:label 真值 - y_pred:预测值 - sample_weight:每个示例的可选权重。默认值为1。可以是Tensor,其维度与y_true相同,并且必须可广播到y_true。(具体见下面例子) ##### 返回: Update op. ### result() 计算并返回结果 ``` result() ``` ### reset_states() 重置所有变量。 在训练期间评估指标时,在各个时期/步骤之间调用此功能。 ``` reset_states() ``` # 例子 下面例子,y_true 和 y_pred 是一维数组,有 4 个数字,其中后 2 个数字完全匹配,所以准确率是`2/4=0.5` ``` m = tf.keras.metrics.Accuracy() m.update_state([2, 3, 3, 4], [1, 4, 3, 4]) print('准确率: ', m.result().numpy()) ``` 执行结果: ``` 准确率: 0.5 ``` ------------ 继续执行,继续调用`m.update_state()`方法,y_true 和 y_pred 是一维数组,有 4 个数字,其中后 3 个数字完全匹配,**看上去准确率应该是**:`3/4=0.75`,但观察运行结果: ``` m.update_state([1, 2, 3, 4], [0, 2, 3, 4]) print('准确率: ', m.result().numpy()) ``` 执行结果: ``` 准确率: 0.625 ``` **原因:** 由于没有新创建`tf.keras.metrics.Accuracy()`对象,也没有调用`reset_states()`方法,所以计算方式是:将两次调用`update_state()`进行累加,共8个数字,有6个数字完全匹配,所以准确率是:`5/8=0.625` ------------ 如果多次调用`update_state()`,且独立计算,互不干扰,需要调用`reset_states()`方法 ``` m = tf.keras.metrics.Accuracy() m.update_state([2, 3, 3, 4], [1, 4, 3, 4]) print('准确率: ', m.result().numpy()) m.reset_states() m.update_state([1, 2, 3, 4], [0, 2, 3, 4]) print('准确率: ', m.result().numpy()) ``` 执行结果: ``` 准确率: 0.5 准确率: 0.75 ``` ### sample_weight 作用 ``` m = tf.keras.metrics.Accuracy() # sample_weight=[0,0,0,1]表示只匹配最后一个数字 m.update_state([2, 3, 3, 4], [1, 4, 3, 4],sample_weight=[0,0,0,1]) print('准确率: ', m.result().numpy()) ``` 执行结果: ``` 准确率: 1.0 ``` 原文出处:http://malaoshi.top/show_1EF5bUepvnuF.html