metrics_cn.rst 11.8 KB
Newer Older
T
Tink_Y 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372

#################
 fluid.metrics
#################



.. _cn_api_fluid_merics_Auc:

Auc
>>>>

.. py:class:: paddle.fluid.metrics.Auc(name, curve='ROC', num_thresholds=4095)

Auc度量适用于二分类。参考 https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve  。需要注意auc度量本身是用Python计算值。如果关心速度,请用fluid.layers.auc。

auc函数创建四个局部变量true_positives, true_negatives, false_positives和false_negatives,用于计算AUC。对于离散化AUC曲线,临界值线性间隔设置以便计算召回率和准确率的值,用false positive率的召回值高度计算ROC曲线面积,用recall的准确值高度计算PR曲线面积。

参数:
    - **name** - 度量名
    - **curve** - 将要计算的曲线名的详情,曲线包括ROC(默认)或者PR(Precision-Recall-curve)。

注:目前只用Python实现ROC曲线

**代码示例**:

.. code-block:: python

    pred = fluid.layers.fc(input=data, size=1000, act="tanh")
    metric = fluid.metrics.Auc()
    for data in train_reader():
        loss, preds, labels = exe.run(fetch_list=[cost, preds, labels])
        metric.update(preds, labels)
        numpy_auc = metric.eval()










英文版API文档: :ref:`api_fluid_merics_Auc` 

.. _cn_api_fluid_merics_MetricBase:

MetricBase
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.MetricBase(name)

所有Metrics的基类。MetricBase为模型估计方法定义一组接口。Metrics累积连续的两个minibatch之间的度量状态,对每个minibatch用最新接口将当前minibatch值添加到全局状态。用eval函数来计算last reset()或者scratch on()中累积的度量值。如果需要定制一个新的metric,请继承自MetricBase和自定义实现类。

参数:
    - **name** (str) - metric实例名。例如准确率(accuracy)。如果想区分一个模型里不同的metrics,则需要实例名。

.. py:method:: reset()

        reset()清除度量(metric)的状态(state)。默认情况下,状态(state)包含没有 ``_`` 前缀的metric。reset将这些状态设置为初始状态。如果不想使用隐式命名规则,请自定义reset接口。

.. py:method:: get_config()

获取度量(metric)状态和当前状态。状态(state)包含没有 ``_`` 前缀的成员。
        
参数:**None**

返回:metric对应到state的字典

返回类型:字典(dict)


.. py:method:: update(preds,labels)

更新每个minibatch的度量状态(metric states),用户可通过Python或者C++操作符计算minibatch度量值(metric)。

参数:
     - **preds** (numpy.array) - 当前minibatch的预测
     - **labels** (numpy.array) - 当前minibatch的标签,如果标签为one-hot或者soft-label,应该自定义相应的更新规则。

.. py:method:: eval()

基于累积状态(accumulated states)评估当前度量(current metric)。

返回:metrics(Python中)

返回类型:float|list(float)|numpy.array



英文版API文档: :ref:`api_fluid_merics_MetricBase` 

.. _cn_api_fluid_metrics_Accuracy:

Accuracy
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.Accuracy(name=None)

累加mini-batch正确率,计算每次pass的平均准确率。https://en.wikipedia.org/wiki/Accuracy_and_precision

参数:
    - **name** — 度量标准的名称

**代码示例**

.. code-block:: python

    labels = fluid.layers.data(name="data", shape=[1], dtype="int32")
    data = fluid.layers.data(name="data", shape=[32, 32], dtype="int32")
    pred = fluid.layers.fc(input=data, size=1000, act="tanh")
    minibatch_accuracy = fluid.layers.accuracy(pred, label)
    accuracy_evaluator = fluid.metrics.Accuracy()
    for pass in range(PASSES):
        accuracy_evaluator.reset()
        for data in train_reader():
            batch_size = data[0]
            loss = exe.run(fetch_list=[cost, minibatch_accuracy])
        accuracy_evaluator.update(value=minibatch_accuracy, weight=batch_size)
        numpy_acc = accuracy_evaluator.eval()


.. py:method:: update(value, weight)

更新mini batch的状态.

参数:	
    - **value** (float|numpy.array) – 每个mini batch的正确率
    - **weight** (int|float) – batch 大小



英文版API文档: :ref:`api_fluid_metrics_Accuracy` 

.. _cn_api_fluid_metrics_ChunkEvaluator:

ChunkEvaluator
>>>>>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.ChunkEvaluator(name=None)

用mini-batch的chunk_eval累计counter numbers,用累积的counter numbers计算准确率、召回率和F1值。对于chunking的基础知识,请参考 .. _Chunking with Support Vector Machines: https://aclanthology.info/pdf/N/N01/N01-1025.pdf 。ChunkEvalEvaluator计算块检测(chunk detection)的准确率,召回率和F1值,支持IOB, IOE, IOBES和IO标注方案。

**代码示例**:

.. code-block:: python

        labels = fluid.layers.data(name="data", shape=[1], dtype="int32")
        data = fluid.layers.data(name="data", shape=[32, 32], dtype="int32")
        pred = fluid.layers.fc(input=data, size=1000, act="tanh")
        precision, recall, f1_score, num_infer_chunks, num_label_chunks, num_correct_chunks = layers.chunk_eval(
        input=pred,
        label=label)
        metric = fluid.metrics.ChunkEvaluator()
        for data in train_reader():
            loss, preds, labels = exe.run(fetch_list=[cost, preds, labels])
            metric.update(num_infer_chunks, num_label_chunks, num_correct_chunks)
            numpy_precision, numpy_recall, numpy_f1 = metric.eval()
    
.. py:method:: update(num_infer_chunks, num_label_chunks, num_correct_chunks)

基于layers.chunk_eval()输出更新状态(state)输出

参数:
    - **num_infer_chunks** (int|numpy.array): 给定minibatch的Interface块数。
    - **num_label_chunks** (int|numpy.array): 给定minibatch的Label块数。
    - **num_correct_chunks** (int|numpy.array): 给定minibatch的Interface和Label的块数



英文版API文档: :ref:`api_fluid_metrics_ChunkEvaluator` 

.. _cn_api_fluid_metrics_CompositeMetric:

CompositeMetric
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.CompositeMetric(name=None)

在一个实例中组合多个指标。例如,将F1、准确率、召回率合并为一个指标。

**代码示例**

.. code-block:: python

        labels = fluid.layers.data(name="data", shape=[1], dtype="int32")
        data = fluid.layers.data(name="data", shape=[32, 32], dtype="int32")
        pred = fluid.layers.fc(input=data, size=1000, act="tanh")
        comp = fluid.metrics.CompositeMetric()
        acc = fluid.metrics.Precision()
        recall = fluid.metrics.Recall()
        comp.add_metric(acc)
        comp.add_metric(recall)
        for pass in range(PASSES):
        comp.reset()
        for data in train_reader():
            loss, preds, labels = exe.run(fetch_list=[cost, preds, labels])
        comp.update(preds=preds, labels=labels)
        numpy_acc, numpy_recall = comp.eval()


.. py:method:: add_metric(metric)

向CompositeMetric添加一个度量指标

参数:
    - **metric** –  MetricBase的一个实例。



.. py:method:: update(preds, labels)

更新序列中的每个指标。

参数:
    - **preds**  (numpy.array) - 当前mini batch的预测
    - **labels**  (numpy.array) - 当前minibatch的label,如果标签是one-hot或soft-laebl 编码,应该自定义相应的更新规则。

.. py:method:: eval()

按顺序评估每个指标。


返回:Python中的度量值列表。

返回类型:list(float | numpy.array)




英文版API文档: :ref:`api_fluid_metrics_CompositeMetric` 

.. _cn_api_fluid_metrics_DetectionMAP:

DetectionMAP
>>>>>>>>>>>>

.. py:class:: class paddle.fluid.metrics.DetectionMAP(name=None)

计算 detection 平均精度(mAP)。 mAP是衡量object detectors精度的指标,比如 Faster R-CNN,SSD等。它不同于召回率,它是最大精度的平均值。 请从以下文章中获取更多信息:

https://sanchom.wordpress.com/tag/average-precision/

https://arxiv.org/abs/1512.02325

通常步骤如下:

1. 根据detectors中的输入和label,计算  true positive 和 false positive
2. 计算map,支持 ‘11 point’ and ‘integral’
    

**代码示例**

.. code-block:: python

        pred = fluid.layers.fc(input=data, size=1000, act="tanh")
        batch_map = layers.detection_map(
            input,
            label,
            class_num,
            background_label,
            overlap_threshold=overlap_threshold,
            evaluate_difficult=evaluate_difficult,
            ap_version=ap_version)
        
        metric = fluid.metrics.DetectionMAP()
        for data in train_reader():
            loss, preds, labels = exe.run(fetch_list=[cost, batch_map])
            batch_size = data[0]
            metric.update(value=batch_map, weight=batch_size)
            numpy_map = metric.eval()





英文版API文档: :ref:`api_fluid_metrics_DetectionMAP` 

.. _cn_api_fluid_metrics_EditDistance:

EditDistance
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.EditDistance(name)

编辑距离是通过计算将一个字符串转换为另一个字符串所需的最小操作数来量化两个字符串(例如单词)之间的差异的一种方法。参考 https://en.wikipedia.org/wiki/Edit_distance
从mini batch中累计编辑距离和序列号,计算所有batch的平均编辑距离和实例错误。

参数:
    - **name** - 度量标准名称

**代码示例**

.. code-block:: python

    distances, seq_num = fluid.layers.edit_distance(input, label)
    distance_evaluator = fluid.metrics.EditDistance()
    for epoch in PASS_NUM:
        distance_evaluator.reset()
        for data in batches:
            loss = exe.run(fetch_list=[cost] + list(edit_distance_metrics))
        distance_evaluator.update(distances, seq_num)
        distance, instance_error = distance_evaluator.eval()

在上面的例子中:'distance'是一个pass中的编辑距离的平均值。 'instance_error'是一个pass中的实例的错误率。



英文版API文档: :ref:`api_fluid_metrics_EditDistance` 

.. _cn_api_fluid_metrics_Precision:

Precision
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.Precision(name=None)

Precision(也称为 positive predictive value,正预测值)是被预测为正样例中实际为正的比例。https://en.wikipedia.org/wiki/Evaluation_of_binary_classifiers
注:二分类中,Precision与Accuracy不同,

.. math::
    Accuracy  & = \frac{true \quad positive}{total \quad instances(所有样例)}  \\\\
    Precision & = \frac{true \quad positive}{all \quad positive \quad instances(所有正样例)}


**代码示例**

.. code-block:: python

    metric = fluid.metrics.Precision() 
    
    for pass in range(PASSES):
        metric.reset() 
        for data in train_reader():
        loss, preds, labels = exe.run(fetch_list=[cost, preds, labels])
         metric.update(preds=preds, labels=labels) 
        numpy_precision = metric.eval()



英文版API文档: :ref:`api_fluid_metrics_Precision` 

.. _cn_api_fluid_metrics_Recall:

Recall
>>>>>>>>>>>>

.. py:class:: paddle.fluid.metrics.Recall(name=None)

召回率(也称为敏感度)是度量有多个正例被分为正例

https://en.wikipedia.org/wiki/Precision_and_recall

**代码示例**

.. code-block:: python

        metric = fluid.metrics.Recall() 
        
        for pass in range(PASSES):
            metric.reset() 
            for data in train_reader():
                loss, preds, labels = exe.run(fetch_list=[cost, preds, labels])
                metric.update(preds=preds, labels=labels) 
                numpy_recall = metric.eval()




英文版API文档: :ref:`api_fluid_metrics_Recall`