我正在尝试使用神经网络和梯度下降算法使我的程序学习OR逻辑门。我将额外的输入神经元作为-1,以便我可以调整神经元的阈值以便稍后激活。目前的门槛只是0。 这是我的实施尝试
#!/usr/bin/env python
from numpy import *
def pcntrain(inp, tar, wei, eta):
for data in range(nData):
activation = dot(inp,wei)
wei += eta*(dot(transpose(inp), target-activation))
print "ITERATION " + str(data)
print wei
print "TESTING LEARNED ALGO"
# Sample input
activation = dot(array([[0,0,-1],[1,0,-1],[1,1,-1],[0,0,-1]]),wei)
print activation
nIn = 2
nOut = 1
nData = 4
inputs = array([[0,0],[0,1],[1,0],[1,1]])
target = array([[0],[1],[1],[1]])
inputs = concatenate((inputs,-ones((nData,1))),axis=1) #add bias input = -1
weights = random.rand(nIn +1,nOut)*0.1-0.05 #random weight
if __name__ == '__main__':
pcntrain(inputs, target, weights, 0.25)
此代码似乎产生的输出似乎不是OR门。帮助
答案 0 :(得分:1)
如果您将测试数据更正为
,那么 是一个OR门activation = dot(array([[0,0,-1],[1,0,-1],[1,1,-1],[0,1,-1]]),wei)
(你的代码有0,0两次,而且从不0,1)它产生
[[ 0.30021868]
[ 0.67476151]
[ 1.0276208 ]
[ 0.65307797]]
,在调用round后给出
[[ 0.]
[ 1.]
[ 1.]
[ 1.]]
根据需要。
但是,您确实有一些小错误:
[[ 0.25000001]
[ 0.75 ]
[ 1.24999999]
[ 0.75 ]]