当前位置: 首页 > 知识库问答 >
问题:

神经网络异或-python

呼延聪
2023-03-14

我已经实现了下面的神经网络来解决Python中的异或问题。我的神经网络由3个神经元的输入层、1个2个神经元的隐层和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)

backpropogation似乎是正确的,但我一直得到这个错误,所有的值都变成了“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]]

你能帮我解决这个问题吗?谢谢你。

共有1个答案

萧霍英
2023-03-14

你有一些关于重量爆炸的问题:

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)
 类似资料:
  • 我实现了以下神经网络来解决Python中的异或问题。我的神经网络由2个神经元的输入层、1个2个神经元的隐藏层和1个神经元的输出层组成。我使用Sigmoid函数作为隐藏层的激活函数,使用线性(恒等式)函数作为输出层的激活函数: 反向传播似乎都是正确的;我想到的唯一问题是我在实现偏差单位时遇到的一些问题。无论哪种方式,每次运行代码时,每个输入的所有谓词都会收敛到大约0.5。我仔细检查了代码,似乎找不到

  • 我创建了一个神经网络,其结构如下: Input1-Input2-输入层。 N0-N1-隐藏层。每个节点3个权重(一个用于偏移)。 N2——输出层。3个砝码(一个用于偏置)。 我正在尝试使用以下测试数据对其进行XOR函数训练: 0 1-期望结果:1 1 0-期望结果:1 0 0-所需结果:0 1 1-所需结果:0 训练后,测试的均方误差(当寻找1结果时){0,1}=0,我认为这很好。但是测试的均方误

  • 我试图用两个感知器网络做一个异或门,但由于某种原因,网络没有学习,当我在图中绘制误差的变化时,误差达到一个静态水平,并在该区域振荡。 目前我没有给网络添加任何偏见。 这是错误随着学习轮数的变化而变化。这是正确的吗?红色线是我所期望的错误将如何改变的线。

  • 神经网络 (Neural Network) 是机器学习的一个分支,全称人工神经网络(Artificial Neural Network,缩写 ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。 Perceptron (感知器) 一个典型的神经网络由输入层、一个或多个隐藏层以及输出层组成,其中箭头代表着数据流动的方向,而圆圈代表激活函数(最常用的激活函数为

  • 译者:bat67 最新版会在译者仓库首先同步。 可以使用torch.nn包来构建神经网络. 我们以及介绍了autograd,nn包依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 例如,下面这个神经网络可以对数字进行分类: 这是一个简单的前馈神经网络(feed-forward network)。它接受一

  • 我玩神经网络。我了解卷积层、完全连接层和许多其他东西是如何工作的。我还知道什么是梯度,以及如何训练这样的网络。 框架千层面包含一个称为InverseLayer的层。 InverseLayer类通过应用要反转的层相对于其输入的偏导数,对神经网络的单层执行反转操作。 我不知道这是什么意思,或者我应该在什么时候使用这个层。或者倒置偏导数背后的想法是什么? 非常感谢你