DL:LinearNN(numpy自定义的) solve XOR problem

举报
一个处女座的程序猿 发表于 2021/03/26 22:54:09 2021/03/26
【摘要】 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

 

 

目录

输出结果

核心代码

LinearNN使用案例


 

 

输出结果

 

核心代码


  
  1. #BP solve XOR Problem
  2. import numpy as np
  3. #输入数据,第一列的数字1表示偏置
  4. X = np.array ([[1, 0, 0],
  5. [1, 0, 1],
  6. [1, 1, 0],
  7. [1, 1, 1]])
  8. #标签
  9. Y = np.array ([[0, 1, 1, 0]]) #两个中括号代表二维。分别对应00、01、10、11
  10. #权值初始化,3行4列,取值范围[-1,1]
  11. V = np.random.randn(3,4)*2-1
  12. W = np.random.randn(4,1)*2-1
  13. print (V)
  14. print (W)
  15. #设置学习率
  16. lr = 0.11
  17. def update(): #更新权值的函数
  18. global X,Y,W,V,lr #当自定义的函数需要调用外部的参数时,需要利用global进行声明为全局变量
  19. L1=sigmoid(np.dot(X,V)) #隐藏层输出4*4
  20. L2=sigmoid(np.dot(L1,W)) #输出层输出4*1
  21. L2_delta=(Y.T-L2)*dsigmoid(L2) #Y.T就是Y的转置
  22. L1_delta=L2_delta.dot(W.T)*dsigmoid(L1)
  23. W_C=lr*L1.T.dot(L2_delta)
  24. V_C=lr*X.T.dot(L1_delta)
  25. W=W+W_C
  26. V=V+V_C
  27. for i in range(20000):
  28. update() #更新权值
  29. if i%500==0:
  30. L1=sigmoid(np.dot(X,V)) #隐藏层输出4*4
  31. L2=sigmoid(np.dot(L1,W)) #输出层输出4*1
  32. print("error:",np.mean(np.abs(Y.T-L2)))
  33. L1=sigmoid(np.dot(X,V)) #隐藏层输出4*4
  34. L2=sigmoid(np.dot(L1,W)) #输出层输出4*1
  35. print(L2)
  36. def judge(x):
  37. if x>=0.5:
  38. return 1
  39. else:
  40. return 0
  41. for i in map(judge,L2):
  42. 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。