Keras指标与TF后端vs张量流指标

时间:2018-08-07 20:31:12

标签: python python-2.7 tensorflow keras keras-2

当Keras 2.x删除某些指标时,变更日志说它这样做是因为它们是“基于批处理”的,因此并不总是准确的。这是什么意思?张量流中包含的相应指标是否存在相同的缺点?例如:精度和召回率指标。

1 个答案:

答案 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_positivespredicted_positives的持久计数器。 TensorFlow指标是有状态的,例如tf.metrics.precision