---
title: 混合精度场景下，由于极端模型超参导致算子溢出
description: "SSD-ResNet50V1-FPN网络，在allow_mix_precision精度模式下，设置静态lossscale=1，执行单卡训练，发现global_step不更新，且每个迭代都有Sub融合算子溢出："
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000132.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000132.html
indexId: 203ab43d13f63a1a2509aabbadc6ba14fa7b6b485d4dd823be5e2960d1e25b6973
---
# 混合精度场景下，由于极端模型超参导致算子溢出

#### 问题现象

SSD-ResNet50V1-FPN网络，在allow_mix_precision精度模式下，设置静态lossscale=1，执行单卡训练，发现global_step不更新，且每个迭代都有Sub融合算子溢出：


#### 原因分析

经分析发现，在混合精度场景下，下图中75行的计算已优化为float16高性能计算，但由于该常量转换为float16时，超过float16表达范围变为0，导致81行出现除零错误，从而导致浮点溢出。

该常量在模型意义上是除零异常规避系数，发生在box encoder的坐标系转换阶段，用于避免宽、高信息为0的场景。该参数对混合精度训练的支持并不友善，导致溢出。


#### 解决方案

对于以上极少数模型超参略微极端导致模型收敛变差的情况，可以通过调整EPSILON的取值为float16可表达的数据进行改善，例如根据经验，这里推荐1e-4，在模型超参可以稳定收敛的前提下，该修改几乎不影响模型收敛。
