我已经实现了下面的神经网络来解决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]]
你能帮我解决这个问题吗?谢谢你。
你有一些关于重量爆炸的问题:
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类通过应用要反转的层相对于其输入的偏导数,对神经网络的单层执行反转操作。 我不知道这是什么意思,或者我应该在什么时候使用这个层。或者倒置偏导数背后的想法是什么? 非常感谢你