当我运行我的代码时,我会偶尔以四个为一组获得这些警告.我试图通过在某些语句之前和之后放置调试消息来定位源,以确定其原点.
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Warning: invalid value encountered in double_scalars
Run Code Online (Sandbox Code Playgroud)
这是一个Numpy警告,什么是双标量?
从Numpy我用
min(), argmin(), mean() and random.randn()
Run Code Online (Sandbox Code Playgroud)
我也使用Matplotlib
我读过双标量,但只是部分理解。根据我的理解,这是Numpy可以计算的范围。这就是为什么这里的大多数问题都集中在除以零上(这是一个错误,因为答案将超出范围(无穷大))。
但我不确定我的理解是否正确。另外,我看不到有关RuntimeWarning:overflow在 double_scalars 中遇到的其他原因。什么会导致双标量中遇到溢出?
我在堆栈溢出上读了很多,但我仍然不明白如何避免溢出错误。我正在构建一个使用sigmoid 函数的神经网络。但如果不进行转换或找到这些错误的解决方法,我就无法继续下去。
def activation(x):
return 1/(1+np.exp(-x))
def dactivation(x):
return activation(x)*(1-activation(x))
def propagateb(self, target, lrate=8.1, momentum=0.1):
deltas = []
error = target - self.layers[-1]
delta = error*dactivation(self.layers[-1])
deltas.append(delta)
for i in range(len(self.shape)-2,0,-1):
delta =np.dot(deltas[0],self.weights[i].T)*dactivation(self.layers[i])
deltas.insert(0,delta)
for i in range(len(self.weights)):
layer = np.atleast_2d(self.layers[i])
delta = np.atleast_2d(deltas[i])
dw = np.dot(layer.T,delta)
self.weights[i] += lrate*dw + momentum*self.dw[i]
self.dw[i] = dw
# Return error
return (error**2).sum()
Run Code Online (Sandbox Code Playgroud)
增加
ann.py:5: RuntimeWarning: overflow encountered in exp
return 1/(1+np.exp(-x))
Run Code Online (Sandbox Code Playgroud)