神经网络单层感知器的实现(python)
问题:假设平面坐标系上有三个点(3,3),(4,3)这两个坐标点的标签为 1 ,(1,1) 这个坐标的标签为-1 ,构建神经网络来分类。思路:二维数据,需要两个数据点,将神经元偏置设置成另一个输入点,一共需要三个输入点输入数据:(1,3,3),(1,4,3),(1,1,1)数据对应标签为(1,1,-1)初始化权值为w0,w1,w2 为 -1 到 1 的随机数学习率为0.11激...
·
问题:
假设平面坐标系上有三个点(3,3),(4,3)这两个坐标点的标签为 1 ,(1,1) 这个坐标的标签为-1 ,构建神经网络来分类。
思路:
二维数据,需要两个数据点,将神经元偏置设置成另一个输入点,一共需要三个输入点
输入数据:(1,3,3),(1,4,3),(1,1,1)
数据对应标签为(1,1,-1)
初始化权值为w0,w1,w2 为 -1 到 1 的随机数
学习率为0.11
激活函数:sign
最终我们确定下来的是w0,w1,w2
那么分界线的表达式为: w0+w1*x1+w2*x2=0
因为x2为y轴上的值,那么最终的表达式为:
y=(-w1/w2)*x - -w0/w2
python实现:
import numpy as np
import matplotlib.pyplot as plt
#输入数据
X = np.array([[1,3,3],
[1,4,3],
[1,1,1]])
#标签
Y = np.array([1,1,-1])
#权值初始化,1行3列,取值范围-1到1
W = (np.random.random(3)-0.5)*2
print(W)
#学习率设置
lr = 0.11
#计算迭代次数
n = 0
#神经网络输出
O = 0
def update():
global X,Y,W,lr,n
n+=1
O = np.sign(np.dot(X,W.T))
W_C = (lr*(Y-O.T).dot(X))/X.shape[0]
W = W+W_C
for _ in range(100):
update()#更新权值
print(W)#打印当前权值
print(n)#打印迭代次数
O = np.sign(np.dot(X,W.T))#计算当前输出
if(O == Y.T).all():#如果实际输出等于期望输出,模型收敛循环结束
print('Finished!')
print('epoch',n)
break
#正样本
x1 = [3,4]
y1 = [3,3]
#负样本
x2 = [1]
y2 = [1]
#计算分界线的斜率和截距
k = -W[1]/W[2]
d = -W[0]/W[2]
print('k=',k)
print('d=',d)
xdata = np.linspace(0,5)#生成一个50个数的等差序列,数的范围为(0,5)
print('xdata',xdata)
plt.figure()
plt.plot(xdata,xdata*k+d,'r')#plot()函数画出一系列的点,并且用线将它们连接起来
plt.plot(x1,y1,'bo')
plt.plot(x2,y2,'yo')
plt.show()
运行结果:
[ 0.78718521 0.68633867 -0.63251315]
1
[ 0.71385187 0.61300534 -0.70584648]
2
[ 0.64051854 0.539672 -0.77917981]
3
[ 0.64051854 0.68633867 -0.63251315]
4
[ 0.56718521 0.61300534 -0.70584648]
5
[ 0.49385187 0.539672 -0.77917981]
6
[ 0.49385187 0.68633867 -0.63251315]
7
[ 0.42051854 0.61300534 -0.70584648]
8
[ 0.34718521 0.539672 -0.77917981]
9
[ 0.34718521 0.68633867 -0.63251315]
10
[ 0.27385187 0.61300534 -0.70584648]
11
[ 0.27385187 0.759672 -0.55917981]
12
[ 0.20051854 0.68633867 -0.63251315]
13
[ 0.12718521 0.61300534 -0.70584648]
14
[ 0.12718521 0.759672 -0.55917981]
15
[ 0.05385187 0.68633867 -0.63251315]
16
[-0.01948146 0.61300534 -0.70584648]
17
[ 0.05385187 0.83300534 -0.48584648]
18
[-0.01948146 0.759672 -0.55917981]
19
[-0.09281479 0.68633867 -0.63251315]
20
Finished!
epoch 20
k= 1.085097874678484
d= -0.14673970555496188
xdata [0. 0.10204082 0.20408163 0.30612245 0.40816327 0.51020408
0.6122449 0.71428571 0.81632653 0.91836735 1.02040816 1.12244898
1.2244898 1.32653061 1.42857143 1.53061224 1.63265306 1.73469388
1.83673469 1.93877551 2.04081633 2.14285714 2.24489796 2.34693878
2.44897959 2.55102041 2.65306122 2.75510204 2.85714286 2.95918367
3.06122449 3.16326531 3.26530612 3.36734694 3.46938776 3.57142857
3.67346939 3.7755102 3.87755102 3.97959184 4.08163265 4.18367347
4.28571429 4.3877551 4.48979592 4.59183673 4.69387755 4.79591837
4.89795918 5. ]

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)