DL:LinearNN(numpy自定义的) solve XOR problem
目录
- BP solve XOR Problem
- import numpy as np
-
- 输入数据,第一列的数字1表示偏置
- X = np.array ([[1, 0, 0],
- [1, 0, 1],
- [1, 1, 0],
- [1, 1, 1]])
- 标签
- Y = np.array ([[0, 1, 1, 0]]) 两个中括号代表二维。分别对应00、01、10、11
- 权值初始化,3行4列,取值范围[-1,1]
- V = np.random.randn(3,4)*2-1
- W = np.random.randn(4,1)*2-1
- print (V)
- print (W)
- 设置学习率
- lr = 0.11
-
- def update(): 更新权值的函数
- global X,Y,W,V,lr 当自定义的函数需要调用外部的参数时,需要利用global进行声明为全局变量
- L1=sigmoid(np.dot(X,V)) 隐藏层输出4*4
- L2=sigmoid(np.dot(L1,W)) 输出层输出4*1
- L2_delta=(Y.T-L2)*dsigmoid(L2) Y.T就是Y的转置
- L1_delta=L2_delta.dot(W.T)*dsigmoid(L1)
-
- W_C=lr*L1.T.dot(L2_delta)
- V_C=lr*X.T.dot(L1_delta)
- W=W+W_C
- V=V+V_C
-
- for i in range(20000):
- update() 更新权值
- if i%500==0:
- L1=sigmoid(np.dot(X,V)) 隐藏层输出4*4
- L2=sigmoid(np.dot(L1,W)) 输出层输出4*1
- print("error:",np.mean(np.abs(Y.T-L2)))
-
- L1=sigmoid(np.dot(X,V)) 隐藏层输出4*4
- L2=sigmoid(np.dot(L1,W)) 输出层输出4*1
- print(L2)
-
- def judge(x):
- if x>=0.5:
- return 1
- else:
- return 0
- for i in map(judge,L2):
- print(i)
1、LinearNN简单案例
2、LinearNN solve XOR problem
当lr=0.3时,相对比较大,每一个步长比较大,所以会在坑底部(最小值)两端进行跳动,然后训练到一定轮数,再改lr=0.03即可看到更好的情况。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!