gpt4 book ai didi

python - 即使经过数小时的训练,神经网络(从头开始,没有 tensorflow)也会给出错误的答案

转载 作者:行者123 更新时间:2023-12-04 08:38:05 25 4
gpt4 key购买 nike

我的神经网络分为 2 个文件,一个是类,另一个是实际创建/运行它的文件
我相信问题出在类文件中。
NN的目的是成为一个或门([1, 1] = 1, [1, 0] = 1, [0, 1] = 1, [0, 0] = 0)
而 [1, 1],[1, 0], 和 [0, 1] 输出 1(它们应该) [0, 0] 输出 0.5 当我期望更低的时候

def sigmoid(x):
return 1/(1+np.exp(-x))

def sigder(x):
return sigmoid(x)*(1-sigmoid(x))

class NN:

def __init__(self, tinputs, toutputs, weights, wfn, trainlen=30000, bias=.3, lr=.05):
self.trainlen = trainlen
self.tinputs = tinputs
self.toutputs = toutputs
self.bias = bias
self.lr = lr
self.weights = weights
self.wfn = wfn

def __repr__(self):
return f"{self.weights}"

def train(self):
for a in range(self.trainlen):
self.inputs = self.tinputs

self.inp = np.dot(self.inputs, self.weights)
self.out = sigmoid(self.inp)

self.error = self.out - self.toutputs

self.derror_dout = self.error
self.dout_din = sigder(self.out)
self.deriv = self.derror_dout * self.dout_din

self.inputs = self.tinputs.T
self.derivfin = np.dot(self.inputs, self.deriv)
self.weights -= self.lr * self.derivfin

for b in self.deriv:
self.bias -= self.lr * b

with open(self.wfn, "wb") as f:
np.save(f, self.weights)

def run(self, inp, fn, gen):
point = np.dot(inp, self.weights)
point = sigmoid(point)
with open(fn, "a") as f:
f.write(f"\nGen:{gen+1}\n{inp}:{point}\n\n")

return point
任何帮助都很棒,谢谢

最佳答案

基本逻辑门对 NN 来说可能是个难题。
我没有在您的代码中发现任何错误,但是根据您问题的性质和您所描述的内容,我敢打赌问题出在训练数据中。当数据中的正面和负面之间不平衡时,NN 可能会偏向正面案例并产生误报。如果您的训练数据具有相同数量的每个输入,则您的负面案例为 25%。
有两种方法可以纠正这个问题,一种是改变你的训练集,把更多的情况放在 [0,0] 或者你可以更加强调假阳性错误,比如在使用它来调整之前将这个错误乘以一个常数节点权重。

关于python - 即使经过数小时的训练,神经网络(从头开始,没有 tensorflow)也会给出错误的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64701065/

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