介绍
计算预测与标签的匹配程度,即:判断预测的准确率
该指标用于分类、逻辑回归
算法
预测样本与标签样本匹配的数量 / 预测样本(标签样本)的总数
如:
标签样本:[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