DL:LinearNN(numpy自定义的) solve XOR problem
【摘要】 DL:LinearNN(numpy自定义的) solve XOR problem
目录
输出结果
核心代码
LinearNN使用案例
输出结果
核心代码
#BP solve XOR Problemimport numpy as np #输入数据,第一列的数字1表示偏置X = np.array ([[1, 0, 0], [1...
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)
LinearNN使用案例
1、LinearNN简单案例
2、LinearNN solve XOR problem
当lr=0.3时,相对比较大,每一个步长比较大,所以会在坑底部(最小值)两端进行跳动,然后训练到一定轮数,再改lr=0.03即可看到更好的情况。
文章来源: yunyaniu.blog.csdn.net,作者:一个处女座的程序猿,版权归原作者所有,如需转载,请联系作者。
原文链接:yunyaniu.blog.csdn.net/article/details/80789976
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)