---
title: 案例介绍
description: "FastRCNN网络，模型转换时，保持默认高性能模式、force_fp16精度模式，推理出来的精度错误，MAP结果为0。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/acldevg/aclcppdevg_000107.html
sourcePath: /source/zh/canncommercial/900/programug/acldevg/aclcppdevg_000107.html
indexId: 2ceef8b5ac0c79763858fc09629e07835fe49eb190df40d2d805ac6176089f1f70
---
# 案例介绍

#### 案例描述

FastRCNN网络，模型转换时，保持默认高性能模式、force_fp16精度模式，推理出来的精度错误，MAP结果为0。

然后，在模型转换时，设置模型的高精度模式（precision_mode=allow_fp32_to_fp16），推理出来的精度正确。


#### 案例分析

1. 模型转换时保持默认高性能模式、force_fp16精度模式，进行推理，获取该模式下的Dump数据文件。
2. 再次模型转换，设置模型的高精度模式（precision_mode=allow_fp32_to_fp16），再次进行推理，获取该模式下的Dump数据文件。
3. 使用精度比对工具，比对  1
与  2
中的Dump数据。
  比对结果示例如下：

4. 从图中可以看CosineSimilarity这一列，余弦相似度算法比对出来的结果，范围是[-1,1]，比对的结果如果越接近1，表示两者的值越相近，越接近-1意味着两者的值越相反。对于大部分算子，值低于0.95就说明存在精度问题。
  上图中AddN算子第0个输出的余弦相似度只有0.72，说明这个算子可能存在精度问题，因此需要进一步分析该算子在高精度模式下的第0个输出的Dump数据文件（2中获取的Dump数据文件）。

5. 由于Dump数据文件无法通过文本工具直接查阅，因此在分析该Dump数据文件前，请参考《精度调试工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/ModelAccuracyAnalyzer/atlasaccuracy_16_1000.html)》的“查看dump数据文件(https://www.hiascend.comdocument/detail/zh/canncommercial/900/devaids/ModelAccuracyAnalyzer/atlasaccuracy_16_0055.html)”章节，先将dump数据文件转换为numpy格式，再将numpy格式文件转换为txt格式文件。
  在将numpy格式文件转换为txt格式文件的过程中，可以获取AddN算子第0个输出的最大值、最小值，命令示例如下（****.npy表示numpy格式文件的路径）：

```
$ python3
Python 3 (default, Mar  5 2020, 16:07:54)[GCC 5.4.0 20160609] on linuxType ....
>>> import numpy as np
>>> a = np.load("****
.npy
")
>>> a.max()
>>> 109508.0
>>> a.min()
>>> 70683.0
```


6. 从  5
获取到的AddN算子第0个输出的最大值、最小值，可以看出高精度模式下AddN算子输出tensor的最大值为109508.0，而高性能模式（fp16）下，输出tensor的最大值为65504.0，FP16能表达的最大值域范围为（-65505~65504），由此可以得出高精度模式下AddN算子的输出值大于fp16类型域表达范围，因此需要配置该算子走高精度模式，参见  配置部分算子保持原始网络中的数据类型
。
