metrics_cn.rst 11.5 KB
Newer Older
T
Tink_Y 已提交
1 2 3 4 5 6
#################
 fluid.metrics
#################



H
1207  
Hao Wang 已提交
7
.. _cn_api_fluid_metrics_Accuracy:
T
Tink_Y 已提交
8

H
1207  
Hao Wang 已提交
9 10
Accuracy
-------------------------------
T
Tink_Y 已提交
11

H
1207  
Hao Wang 已提交
12
.. py:class:: paddle.fluid.metrics.Accuracy(name=None)
T
Tink_Y 已提交
13

H
1207  
Hao Wang 已提交
14
累加mini-batch正确率,计算每次pass的平均准确率。https://en.wikipedia.org/wiki/Accuracy_and_precision
T
Tink_Y 已提交
15

H
1207  
Hao Wang 已提交
16 17
参数:
    - **name** — 度量标准的名称
T
Tink_Y 已提交
18

H
1207  
Hao Wang 已提交
19
**代码示例**
T
Tink_Y 已提交
20 21 22

.. code-block:: python

H
1207  
Hao Wang 已提交
23 24
    labels = fluid.layers.data(name="data", shape=[1], dtype="int32")
    data = fluid.layers.data(name="data", shape=[32, 32], dtype="int32")
T
Tink_Y 已提交
25
    pred = fluid.layers.fc(input=data, size=1000, act="tanh")
H
1207  
Hao Wang 已提交
26 27 28 29 30 31 32 33 34
    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()
T
Tink_Y 已提交
35 36


H
1207  
Hao Wang 已提交
37
.. py:method:: update(value, weight)
T
Tink_Y 已提交
38

H
1207  
Hao Wang 已提交
39
更新mini batch的状态.
T
Tink_Y 已提交
40

H
1207  
Hao Wang 已提交
41 42 43
参数:	
    - **value** (float|numpy.array) – 每个mini batch的正确率
    - **weight** (int|float) – batch 大小
T
Tink_Y 已提交
44 45 46 47 48 49 50







H
1207  
Hao Wang 已提交
51
.. _cn_api_fluid_metrics_Auc:
T
Tink_Y 已提交
52

H
1207  
Hao Wang 已提交
53 54
Auc
-------------------------------
T
Tink_Y 已提交
55

H
1207  
Hao Wang 已提交
56
.. py:class:: paddle.fluid.metrics.Auc(name, curve='ROC', num_thresholds=4095)
T
Tink_Y 已提交
57

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

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

参数:
H
1207  
Hao Wang 已提交
63 64
    - **name** - 度量名
    - **curve** - 将要计算的曲线名的详情,曲线包括ROC(默认)或者PR(Precision-Recall-curve)。
T
Tink_Y 已提交
65

H
1207  
Hao Wang 已提交
66
注:目前只用Python实现ROC曲线
T
Tink_Y 已提交
67

H
1207  
Hao Wang 已提交
68
**代码示例**:
T
Tink_Y 已提交
69

H
1207  
Hao Wang 已提交
70
.. code-block:: python
T
Tink_Y 已提交
71

H
1207  
Hao Wang 已提交
72 73 74 75 76 77
    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()
T
Tink_Y 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94














.. _cn_api_fluid_metrics_ChunkEvaluator:

ChunkEvaluator
H
1207  
Hao Wang 已提交
95
-------------------------------
T
Tink_Y 已提交
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

.. 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的块数



H
1207  
Hao Wang 已提交
128 129 130



T
Tink_Y 已提交
131 132 133 134

.. _cn_api_fluid_metrics_CompositeMetric:

CompositeMetric
H
1207  
Hao Wang 已提交
135
-------------------------------
T
Tink_Y 已提交
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

.. 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)




H
1207  
Hao Wang 已提交
190 191 192



T
Tink_Y 已提交
193 194 195 196

.. _cn_api_fluid_metrics_DetectionMAP:

DetectionMAP
H
1207  
Hao Wang 已提交
197
-------------------------------
T
Tink_Y 已提交
198

H
1207  
Hao Wang 已提交
199
.. py:class:: paddle.fluid.metrics.DetectionMAP(name=None)
T
Tink_Y 已提交
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

计算 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()





H
1207  
Hao Wang 已提交
238 239 240



T
Tink_Y 已提交
241 242 243 244

.. _cn_api_fluid_metrics_EditDistance:

EditDistance
H
1207  
Hao Wang 已提交
245
-------------------------------
T
Tink_Y 已提交
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

.. 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中的实例的错误率。



H
1207  
Hao Wang 已提交
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




.. _cn_api_fluid_metrics_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






T
Tink_Y 已提交
324 325 326 327

.. _cn_api_fluid_metrics_Precision:

Precision
H
1207  
Hao Wang 已提交
328
-------------------------------
T
Tink_Y 已提交
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

.. 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()



H
1207  
Hao Wang 已提交
355 356 357



T
Tink_Y 已提交
358 359 360 361

.. _cn_api_fluid_metrics_Recall:

Recall
H
1207  
Hao Wang 已提交
362
-------------------------------
T
Tink_Y 已提交
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385

.. 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()




H
1207  
Hao Wang 已提交
386 387 388



T
Tink_Y 已提交
389