我一直在试图让下面的神经网络工作,作为一个简单的AND门,但它似乎并没有工作。以下是我的代码:用于AND逻辑门的单层神经网络(Python)
import numpy as np
def sigmoid(x,derivative=False):
if(derivative==True):
return x*(1-x)
return 1/(1+np.exp(-x))
np.random.seed(1)
weights = np.array([0,0,0])
training = np.array([[[1,1,1],1],
[[1,1,0],0],
[[1,0,1],0],
[[1,0,0],0]])
for iter in xrange(training.shape[0]):
#forwardPropagation:
a_layer1 = training[iter][0]
z_layer2 = np.dot(weights,a_layer1)
a_layer2 = sigmoid(z_layer2)
hypothesis_theta = a_layer2
#backPropagation:
delta_neuron1_layer2 = a_layer2 - training[iter][1]
Delta_neuron1_layer2 = np.dot(a_layer2,delta_neuron1_layer2)
update = Delta_neuron1_layer2/training.shape[0]
weights = weights-update
x = np.array([1,0,1])
print weights
print sigmoid(np.dot(weights,x))
上面的程序不断返回奇怪的值作为输出,输入X返回比数组[1,1,1]更高的值。每个培训/测试“输入”的第一个元素代表偏见单位。该代码是基于Andrew Ng在其Coursera Course上的机器学习课程视频:https://www.coursera.org/learn/machine-learning
在此先感谢您的帮助。
我敢打赌,你的阵列形状会导致不需要的广播操作发生,导致学习全部搞砸。 –