代码如下
#单层感知器
import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[3.6, 6.6],
[9.3, 6.3],
[7.1, 8.1],
[4.0, 4.1],
[4.2, 4.2],
[2.8, 2.9],
[7.1, 7.3],
[9.2, 7.6],
[8.1, 7.8],
[2.9, 4.9],
[9.3, 8.2],
[4.2, 3.5]])
#标签
Y = np.array([1,-1,-1,1,1,-1,-1,-1,1,-1,1,1])
#权值初始化一行二列,取值范围-1到1
W = (np.random.random(2)-0.5)*2
#学习率设置
lr = 0.11
#计算迭代次数
n = 0
#神经网络输出
O=0
def update():
global X,Y,W,lr,n,O,E,W_C
n += 1
O = np.sign(np.dot(X,W.T))
E = Y - O.T
W_C = lr*(Y-O.T).dot(X)/int(X.shape[0]) #权值需要改变的值
W = W+W_C #修正权值
for _ in range(100):
update() #更新权值
print("W:",W) #打印权值
print("n",n) #打印迭代次数
O = np.sign(np.dot(X,W.T))#计算当前输出
print(E)
print(np.dot(X,W.T))
print(O.T)
print(W_C)
if(O==Y.T).all(): #如果实际输出等领域期望输出,模型收敛,循环结束
print("Finished")
print("epoch:",n)
break
相似问题