gpt4 book ai didi

Python简单的神经网络代码不起作用

转载 作者:行者123 更新时间:2023-12-01 09:08:06 26 4
gpt4 key购买 nike

我正在尝试学习神经网络,并编写了一个简单的反向传播神经网络,该网络使用 sigmoid 激活函数和随机权重初始化。我尝试与输入层中的两个输入值 3 和 2 以及输出层中的目标输出 6 相乘。当我执行代码时,w1w2 的值不断增加,并且不会停止在正确的值。

我对 Python 和神经网络都很陌生,希望得到帮助。

import numpy as np
al0 = 3
bl0 = 2
import random
w1 =random.random()
w2 =random.random()
b = 0.234
ol1 = 6
def sigm(x,deriv=False):
if deriv==True:
return x*(1-x)
return 1/(1+np.exp(-x))
y = sigm(x)
E = 1/2*(ol1 - y)**2
dsig = sigm(x,True)
dyE = y-ol1

for iter in range(10000):
syn0 = al0*w1
syn1 = bl0*w2
x = syn0 + syn1 + b
dtotal1 = dyE*dsig*al0
w1 = w1 + 0.01*dtotal1
dtotal2 = dyE*dsig*bl0
w2 = w2 + 0.01*dtotal2
w1
w2

最佳答案

首先您需要整理代码。这些行

y = sigm(x)
E = 1/2*(ol1 - y)**2
dsig = sigm(x,True)
dyE = y-ol1

需要在 for 循环内发生,在 x = syn0 + syn1 + b 之后。

接下来,有一些神经网络项目需要解决。 Here是反向传播的技术描述。

sigm(x) 的导数是 sigm(x) * (1 - sigm(x)),或者在您的情况下,y * ( 1 - y),正如您所实现的那样,它是 sigm(y,True)

您的偏见也需要更新。这是网络的关键部分,也是一个学习参数。您可以使用:

dtotalb = dyE*dsig*1
b = b - 0.01*dtotalb

乘以 1 是不必要的,但很有启发性。这是“net”术语的派生词,您将其称为 x,相对于 b,即 1。

您可能已经注意到,我为 b 提供的更新使用了 - 而不是 +this section的最后一行上面的链接显示这是必要的,以确保更新朝着正确的方向进行,以最大限度地减少您的错误。

最后,考虑您的网络可以输出的可能值。最终输出y是调用sigm(x)的结果。 y 可以取的值在开区间 (0,1) 内。然而,您的网络正在尝试学习 6 的值。它能得到的最接近的值几乎是 1。因此,当您继续迭代时,权重将继续增加,以尝试增加 sigmoid 的输出值。权重将无限增长。

通过所有这些更改,尝试将您的目标设置为 (0,1) 中的某个值,例如0.6。当我进行所有这些更改时,我能够使 E 减小到接近 0,并且您的权重收敛。

旁注:为了让您的网络学习值 6,您将需要另一层没有激活函数的权重。或者,您可以删除激活函数,但随后您开始失去您正在尝试学习的神经网络方法。

关于Python简单的神经网络代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51882681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com