作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
像这样一个由 2 个输入和 1 个输出组成的简单神经网络,没有偏差,似乎不起作用。
|input1||weight1 weight2| = Z
|input2|
输出 = sigmoid(Z)
然而,当添加 BIAS 时它可以完美地工作,为什么它可以工作以及其背后的数学原理是什么?
|input1||weight1 weight2| = Z
|input2|
输出 = sigmoid(Z - BIAS)
这是带有 BIAS 的工作版本的代码:
import numpy as np
import random as r
import sys
def sigmoid(ip, derivate=False):
if derivate:
return ip*(1-ip)
return 1.0/(1+np.exp(-1*ip))
class NeuralNet:
global sigmoid
def __init__(self):
self.inputLayers = 2
self.outputLayer = 1
self.bias = r.random()
def setup(self):
self.i = np.array([r.random(), r.random()], dtype=float).reshape(2,)
self.w = np.array([r.random(), r.random()], dtype=float).reshape(2,)
def forward_propogate(self):
self.z = self.w*self.i
self.o = sigmoid(sum(self.z)-self.bias)
def optimize_cost(self, desired):
i=0
current_cost = pow(desired - self.o, 2)
for weight in self.w:
dpdw = -1*(desired-self.o) * (sigmoid(self.o, derivate=True)) * self.i[i]
self.w[i] = self.w[i] - 2*dpdw
i+=1
#calculate dp/dB
dpdB = -1*(desired-self.o) * (sigmoid(self.o, derivate=True)) * -1
self.bias = self.bias - 2*dpdB
self.forward_propogate()
def train(self, ip, op):
self.i = np.array(ip).reshape(2,)
self.forward_propogate()
self.optimize_cost(op[0])
n = NeuralNet()
n.setup()
# while sys.stdin.read(1):
success_rate = 0
trial=0
done = False
while not done:
a = [0.1,1,0.1,1]
b = [0.1,0.1,1,1]
c = [0,0,0,1]
for i in range(len(a)):
trial +=1
n.train([a[i],b[i]],[c[i]])
if c[i] - n.o < 0.01:
success_rate +=1
print(100*success_rate/trial, "%")
if 100*success_rate/trial > 99 and trial > 4:
print(100*success_rate/trial, "%")
print("Network trained, took: {} trials".format(trial))
print("Network weights:{}, bias:{}".format(n.w, n.bias))
done = True
break
最佳答案
偏差只是截距的移动。您在本示例中设置的神经网络似乎是一个没有隐藏层的单层神经网络,这实际上是一个逻辑回归,它只是一个线性模型。
当您不学习截距值时,截距默认为 0
,因此它始终穿过原点,而您只是学习直线的斜率。要正确对数据的 AND 进行分类,即对右上角的 (1,1)
进行分类,但不对任何其他点进行分类,您需要非零截距,因为没有一条经过原点的线只有右上角在一侧,其他三个点在另一侧。
关于python - 为什么简单的与门神经网络在没有 BIAS 的情况下无法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59607219/
我是一名优秀的程序员,十分优秀!