【问题标题】:Neural network XOR- python神经网络 XOR-python
【发布时间】:2023-03-23 03:25:01
【问题描述】:

我已经实现了以下神经网络来解决 Python 中的 XOR 问题。我的神经网络由 3 个神经元的输入层、2 个神经元的 1 个隐藏层和 1 个神经元的输出层组成。我使用 Sigmoid 函数作为隐藏层和输出层的激活函数:

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)

反向传播似乎是正确的,但我不断收到此错误,所有值都变为“nan”,输出:

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 数学中的原因,并找到导致它出现的点。
  • 哦,再读一遍,它会告诉你它已经发生的确切位置。你的求幂溢出了。你的指数可能太大了。发生溢出时检查x 的值。这可能是出于某种原因。
  • 你不需要那么多神经元来解决异或。它可以用 2 个输入、隐藏层 2 个神经元和输出层 1 个神经元来解决
  • @SumNeuron 正如你所说,我在隐藏中使用了 2 个神经元,在输出中使用了一个神经元
  • @vardaan 你还有一个“3 个神经元的输入层”

标签: python-2.7 neural-network xor


【解决方案1】:

你有一些权重爆炸的问题:

weight1 =   [[ -6.25293101e+194  -2.22527234e+000]
             [  2.24755436e+193  -2.44789058e+000]
             [ -2.40600808e+194  -1.62490517e+000]]

这是因为当您计算反向传播的 delta 误差时,您使用的是点积的输出,而不是激活函数的输出。

更正您的代码:

 delta3  = error * nonlin(a3,deriv=True)
 l1error = delta3.dot(weights2.T)
 delta2  = l1error *nonlin(a2, deriv=True)

【讨论】:

  • 10000迭代后输出:'[[ 0.01139139] [0.98615801] [0.98615404] [0.50073101]]'
  • 100000迭代后输出:[[ 0.01087608] [ 0.99134548] [ 0.99134548] [ 0.0117681 ]]
猜你喜欢
  • 2014-05-09
  • 2015-07-21
  • 2020-02-10
  • 2015-02-04
  • 2019-03-15
  • 2016-05-13
  • 2012-03-28
  • 2017-01-30
  • 1970-01-01
相关资源
最近更新 更多