当Keras 2.x删除某些指标时,变更日志说它这样做是因为它们是“基于批处理”的,因此并不总是准确的。这是什么意思?张量流中包含的相应指标是否存在相同的缺点?例如:精度和召回率指标。
答案 0 :(得分:1)
以精度为例。 stateless version which was removed的实现方式如下:
def precision(y_true, y_pred):
"""Precision metric.
Only computes a batch-wise average of precision.
Computes the precision, a metric for multi-label classification of
how many selected items are relevant.
"""
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
如果y_true
包含数据集中的所有标签,并且y_pred
具有与所有这些标签相对应的模型预测,则可以。
问题是人们经常将数据集分成几批,例如通过对1000张图像进行10次评估来评估10000张图像。为了适应内存限制,这可能是必需的。在这种情况下,您将无法获得10个不同的精度分数。
有状态的度量标准通过将中间值保留在变量中来解决此问题,该变量可以持续整个评估。因此,在precision
的情况下,有状态指标可能具有true_positives
和predicted_positives
的持久计数器。 TensorFlow指标是有状态的,例如tf.metrics.precision。