- 收先导入数据,这个中先将数据存储到x,y中,x中第一行第一个是相当于阈值,第二三个就是输入值,y中的就是输出值
x = array([[1,-0.5,-0.5],
[1,-0.5,0.5],
[1,0.3,-0.5],
[1,0,1]])
y = array([[1.0],
[1.0],
[0],
[0]])
- 设置一个三行一列的权重
weights = np.random.random([3,1])
- 写一个阶跃函数的方法,将大于0的设置为1,小于0的设置为0.(这个根据自己的需要调整)这个我写到step()方法中
def step(x):
for i in range(len(x)):
if x[i] > 0:
x[i] = 1
# print(x[i])
else:
x[i] = 0
return x
- 设置步长d
- 设置一个更新迭代的方法,judge是每次经过激活函数算出来的值,然后weights2是步长 * 原值 * (原值与激活算法值之差),weights加上weights2
def update():
global weights, judge, x, y
judge = step(np.dot(x, weights))
weights2 = d * (x.T.dot(y-judge))/int(x.shape[0])
weights += weights
- 最后经过1000循环,当judge == y的时候就停止,.all()的意思是让矩阵中的每一个都相互对比看是否相同
for i in range(1000):
update()
judge = step(np.dot(x, weights))
if(judge == y).all():
break
print(judge)
print(i)
最后输出的结果
[[1.]
[1.]
[0.]
[0.]]
203
可以用下列两种方法下载完整代码: