我已经实现了下面的神经网络来解决Python中的异或问题。我的神经网络由3个神经元的输入层,2个神经元的1个隐藏层和1个神经元的输出层组成。我使用的S型函数作为隐含层和输出层的激活功能:神经网络XOR-蟒蛇
import numpy as np
x = np.array([[0,0,1], [0,1,1],[1,0,1],[1,1,1]])
y = np.array([[0,1,1,0]]).T
np.random.seed(1)
weights1 = np.random.random((3,2)) - 1
weights2 = np.random.random((2,1)) - 1
def nonlin(x,deriv=False):
if(deriv==True):
return x*(1-x)
return 1/(1+np.exp(-x))
for iter in xrange(10000):
z2 = np.dot(x,weights1)
a2 = nonlin(z2)
z3 = np.dot(a2,weights2)
a3 = nonlin(z3)
error = y- a3
delta3 = error * nonlin(z3,deriv=True)
l1error = delta3.dot(weights2.T)
delta2 = l1error *nonlin(z2, deriv=True)
weights2 += np.dot(a2.T, delta3)
weights1 += np.dot(x.T,delta2)
print(a3)
的backpropogation似乎是正确的,但我不断收到这个错误,所有的值成为“南”,OUTPUT:
RuntimeWarning: overflow encountered in exp
return 1/(1+np.exp(-x))
RuntimeWarning: overflow encountered in multiply
return x*(1-x)
[[ nan]
[ nan]
[ nan]
[ nan]]
你能帮我解决这个问题吗?谢谢。
调试,找出引入NaN被地方。一旦将NaN用于数学方程式,其他一切涉及NaN,并污染你的结果。查看导致NaN出现在Python数学中的原因,并找出导致它出现的位置。 – Carcigenicate
噢,再次阅读它,它会告诉你它到底发生了什么。你的指数溢出。你的指数可能太大了。发生溢出时检查'x'的值。这可能是出于某种原因。 – Carcigenicate
你不需要那么多的神经元来解决异或。它可以用2个输入,隐藏层中的2个神经元和输出层中的一个来解决 – SumNeuron