tf.keras.metrics.Accuracy 计算预测与标签的匹配程度(准确率)

介绍

计算预测与标签的匹配程度,即:判断预测的准确率

该指标用于分类、逻辑回归

算法

预测样本与标签样本匹配的数量 / 预测样本(标签样本)的总数
如:

标签样本:[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

原文出处:/show_1EF5bUepvnuF.html