ImageAI检测器触发exp溢出RuntimeWarning 可否修复或直接忽略?
imageai-detector
RuntimeWarning: overflow encountered in exp 警告问题解答 警告原因
该警告由sigmoid函数实现逻辑触发:当输入的x绝对值过大时,np.exp(-x)会超出浮点数的取值范围,触发运算溢出提示。但溢出场景下sigmoid返回值会自动趋近于0或1,本身不会对检测结果的正确性产生影响。
关于官方修复的说明
你当前使用的是适配TensorFlow 1.x的legacy版本imageai,该分支已经停止维护,官方不会再针对这个版本发布问题修复。如果你升级到适配TensorFlow 2.x/PyTorch的新版本imageai,该问题已经在新版本中得到修复。
自行修复方案
你可以直接修改本地安装包的代码解决该警告,操作如下:
- 找到路径
/usr/local/lib/python3.6/site-packages/imageai/Detection/Custom/__init__.py文件,定位到第1234行的_sigmoid静态方法 - 替换原有实现为带数值裁剪的版本即可彻底消除警告:
@staticmethod def _sigmoid(x): # 裁剪数值范围避免exp运算溢出,不影响sigmoid计算精度 x = np.clip(x, -500, 500) return 1./(1. + np.exp(-x))
能否直接忽略警告
如果你不想修改源码,可以直接忽略该警告,它不会影响检测结果的正确性。如果需要屏蔽掉该警告的打印,可以在你自己的项目代码入口处添加如下代码:
import warnings warnings.filterwarnings("ignore", category=RuntimeWarning, message="overflow encountered in exp")
内容的提问来源于stack exchange,提问作者TkrA
相关产品推荐
相关产品推荐

