在自定义神经网络中,使用sigmoid函数时,报数据溢出overflow错误。
def sigmoid(self, x):
return 1.0 / (1 + np.exp(-x))
RuntimeWarning: overflow encountered in exp
根据测试(测试代码如下),是因为指数出现极大的数据,导致np.exp运算溢出
def sigmoid(self, x):
print(x.min())
return 1.0 / (1 + np.exp(-x))
image.png
网上一般的做法为如下,但是对x为数组却不能执行。
def sigmoid(x): if x>=0: #对sigmoid函数优化,避免出现极大的数据溢出 return 1.0 / (1 + np.exp(-x)) else: return np.exp(x)/(1+np.exp(x))
在我的Python中运行上述代码,x为数组时报错如下:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
x的值不止一个,需要对所有的x都进行判断。
因此本人提出的较好的修改方案如下:如有疑问欢迎评论指出。
def sigmoid(self, x):
y = x.copy() # 对sigmoid函数优化,避免出现极大的数据溢出
y[x >= 0] = 1.0 / (1 + np.exp(-x[x >= 0]))
y[x < 0] = np.exp(x[x < 0]) / (1 + np.exp(x[x < 0]))
return y
如果这篇文章大家觉得有意义的话请多多点赞、收藏支持,也可以在下面点击“赞赏支持”按钮打赏支持我哟~
网友评论