• 深度学习(18):RuntimeWarning: overflow encountered in exp学习笔记


    0 说明

            使用yolov3检测目标时,出现RuntimeWarning: overflow encountered in exp警告;进行了一些代码优化,参考下文,但效果都不好,最后因为仅仅是警告,不是报错,放弃优化代码了

    1. RuntimeWarning: overflow encountered in exp
    2. s = 1 / (1 + np.exp(-x))

    原函数:

    1. def _sigmoid(x):
    2. s = 1 / (1 + np.exp(-x))
    3. return s

    1 代码优化

    1.1 将正负数值进行区分

            下面的代码适合处理单个元素,而非数组

    1. def _sigmoid(x):
    2. if x>=0: #对sigmoid函数的优化,避免了出现极大的数据溢出
    3. s=1.0/(1+exp(-x))
    4. return s
    5. else:
    6. s=exp(x)/(1+exp(x))
    7. return s

    出现新的报错:

    1. if x>=0: #对sigmoid函数的优化,避免了出现极大的数据溢出
    2. ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

    这是因为函数输入参数是numpy的数组,不是一个元素

    1.2 将数组中负数元素处理成正数元素,对每一个元素进行exp运算

            结合1.1的报错,在numpy数组中,不好直接判断np.array整个数组大于零或小于零,所以需要把数组里的数字取出来一个一个判断,计算后,再重新整合:

    1. # 在numpy数组中,不好直接判断np.array整个数组大于零或小于零,
    2. #所以需要把数组里的数字取出来一个一个判断,计算后,再重新整合:
    3. #但这样会增加处理时间,会让帧率变慢
    4. def _sigmoid(x):
    5. x_ravel = x.ravel() # 将numpy数组展平
    6. length = len(x_ravel)
    7. y = []
    8. for index in range(length):
    9. if x_ravel[index] >= 0:
    10. y.append(1.0 / (1 + np.exp(-x_ravel[index])))
    11. else:
    12. y.append(np.exp(x_ravel[index]) / (np.exp(x_ravel[index]) + 1))
    13. return np.array(y).reshape(x.shape)

    没有出现报错,但处理视频的帧率下降非常明显,应该是此处增加了较多的运算复杂度

    1.3 将数组中负数元素处理成正数元素,对整个数组进行np.exp运算

    1. def _sigmoid(x):
    2. x_ravel = x.ravel() # 将numpy数组展平
    3. length = len(x_ravel)
    4. tmp = []
    5. for index in range(length): #将负值变正
    6. if x_ravel[index] < 0:
    7. tmp.append(-x_ravel[index])
    8. else:
    9. tmp.append(x_ravel[index])
    10. x_positive=np.array(tmp).reshape(x.shape)
    11. s = 1.0 / (1 + np.exp(-x_positive))
    12. return s

    程序会报错,不知道为什么,尴尬

     2 放弃优化

    还是用原先的函数,如下,尽管有警告

    1. def _sigmoid(x):
    2. s = 1 / (1 + np.exp(-x))
    3. return s

    3 参考链接

    a.any() or a.all():

    https://blog.csdn.net/sinat_33563325/article/details/79868109

    1.2 参考:

    https://dontla.blog.csdn.net/article/details/106565725

    1.1 参考:

    https://blog.csdn.net/CY_TEC/article/details/106083366 

  • 相关阅读:
    两道 杂题
    windows系统cmake生成动态库无lib文件解决方法
    2011年05月23日 Go生态洞察:Google I/O 2011上的Go视频
    新入职后的第一天GitLab 与 SourceTree的结合使用
    每日学到 42 - JavaScript内置对象
    python基于django的宠物知识分享网站
    Java集训(算法&&面试题)第八天(栈与队列)
    异硫氰酸荧光素标记磁性碲化钨纳米粒FITC-WTe2 NPs|FITC-Hyd-PEG-WTe2|齐岳
    洛谷刷题C语言:FAKTOR、BELA、PUTOVANJE、使用三个系统程度的能力、R.I.P.
    前端请求到 SpringMVC 的处理流程
  • 原文地址:https://blog.csdn.net/BIT_HXZ/article/details/126411150