机器学习(西瓜书)-BP神经网络实现

原理在书上

1、首先定义两个激活函数,越阶函数和sigmoid函数

2、用感知机实现线性可分的与,或,非问题,然后用多层感知机实现线性不可分的异或问题。

3、之后搭建了一个三层神经网络,任务是判断一个数字是否>0.5。

所有的参数还有变量依托于周志华的机器学习(西瓜书)p97-p104

import numpy as np
import matplotlib.pyplot as pltdef sgn(x):if x>=0:return 1else:return 0def sigmoid(x):return 1/(1+np.e**(-x))# return x
x=np.linspace(-10,10,100)
y=[]
for i in x:y.append(sigmoid(i))
plt.plot(x,y)
plt.show()
import numpy as np
import matplotlib.pyplot as pltdef sgn(x):if x>=0:return 1else:return 0def sigmoid(x):return 1/(1+np.e**(-x))# return x
x=np.linspace(-10,10,100)
y=[]
for i in x:y.append(sigmoid(i))
plt.plot(x,y)
plt.show()w1=1
w2=1
d=2
print("\n与运算")
print("x1 x2 y")
for x1 in range(2):for x2 in range(2):y = sgn(x1 * w1 + x2 * w2 -d)print(x1,x2,y)w1=1
w2=1
d=0.5
print("\n或运算")
print("x1 x2 y")
for x1 in range(2):for x2 in range(2):y = sgn(x1 * w1 + x2 * w2 -d)print(x1,x2,y)w1=-0.6
w2=0
d=-0.5
print("\n非运算")
print("x1 y")
for x1 in range(2):for x2 in range(2):y = sgn(x1 * w1 + x2 * w2 -d)print(x1,y)w1_1=1
w1_2=-1
w2_1=-1
w2_2=1
wh_1=1
wh_2=1
d=0.5
print("\n异或运算")
print("x1 x2 y")
for x1 in range(2):for x2 in range(2):h1 = sgn(x1 * w1_1 + x2 * w2_1 -d)h2 = sgn(x1 * w1_2 + x2 * w2_2 - d)y=sgn(h1 * wh_1 + h2 * wh_2 - d)print(x1,x2,y)
import numpy as np
import matplotlib.pyplot as pltdef sgn(x):if x>=0:return 1else:return 0def sigmoid(x):return 1/(1+np.e**(-x))# return x#
#    o       j={0}
#  / | \     whj[3,1]
# o  o  o    h={0,1,2}
#  \ | /     vih[1,3]
#    o       i={0}
x=np.random.random(100)
y=(x>0.5)*1.0
v=np.random.random([1,3])#v_ih
w=np.random.random([3,1])#w_hj
dh=np.random.random(3)#隐层的阈值
dy=np.random.random(1)#输出层阈值def ah(h,xk):  #隐层h的输入sum=0for i in range(1):sum+=v[i][h]*xkreturn sumdef bh(h,xk): #隐层h的输出return sigmoid(ah(h,xk)-dh[h])def Bj(j,xk): #输出层的输入sum=0for h in range(3):sum+=w[h][j]*bh(h,xk)return sumdef yj(j,xk): #输出层的输出return sigmoid(Bj(j,xk)-dy[j])def Ek(xk,k): #损失sum=0for j in range(1):sum+=(yj(j,xk)-y[k])**2return (1/2)*sumdef gj(j,xk,k): #梯度计算return yj(j,xk)*(1-yj(j,xk))*(y[k]-yj(j,xk))def eh(h,xk,k): #梯度项sum=0for j in range(1):sum+=w[h][j]*gj(j,xk,k)return bh(h,xk)*(1-bh(h,xk))*sumdef Model(x):a1=ah(0,x)a2=ah(1,x)a3=ah(2,x)b1=bh(0,x)b2=bh(1,x)b3=bh(2,x)B0=Bj(0,x)y_=yj(0,x)return y_>=0.5def Precsion():good=0for k in range(100):# print(y[k]==Model(x[k])*1.0)if y[k] == Model(x[k]) * 1.0:good+=1print("准确率:",good,"%")def train():n=0.1j=0#输出节点编号,只有一个节点loss=[]#记录损失变化c=0for b in range(200):#循环迭代次数for k in range(100):#对每个样本进行训练c+=1xk=x[k]loss.append(Ek(xk, k))d_whj_0=n*gj(j,xk,k)*bh(0,xk)d_whj_1=n*gj(j,xk,k)*bh(1,xk)d_whj_2=n*gj(j,xk,k)*bh(2,xk)d_dyj_0=-1*n*gj(j,xk,k)d_vih_0=n*eh(0,xk,k)*xkd_vih_1=n*eh(1,xk,k)*xkd_vih_2=n*eh(2,xk,k)*xkd_dh_0=-1*n*eh(0,xk,k)d_dh_1=-1*n*eh(1,xk,k)d_dh_2=-1*n*eh(2,xk,k)w[0][0] = w[0][0] + d_whj_0w[1][0] = w[1][0] + d_whj_1w[2][0] = w[2][0] + d_whj_2# print("w",w[0][0],w[1][0],w[2][0])dy[0] = dy[0] + d_dyj_0# print("dy",dy[0])v[0][0] = v[0][0] + d_vih_0v[0][1] = v[0][1] + d_vih_1v[0][2] = v[0][2] + d_vih_2# print("v",v[0][0],v[0][1],v[0][2])dh[0]=dh[0]+d_dh_0dh[1]=dh[1]+d_dh_1dh[2]=dh[2]+d_dh_2# print("dh",dh[0],dh[1],dh[2])# print("loss===========================================", Ek(k))Precsion()train()
print(Model(0.54))
print(Model(0.44))
# plt.plot(range(c),loss)
# plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18960.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

StarRocks 架构

StarRocks 是什么?( What is StarRocks?) StarRocks 是 MPP 的查询引擎,用来做实时查询,提供亚秒级的查询性能。 兼容 MYSQL 协议,可以和大部分 BI 工具进行无缝衔接。 Apache 2.0 开源产品。 使用场景&…

图像处理 之 凸包和最小外围轮廓生成

“ 最小包围轮廓之美” 一起来欣赏图形之美~ 1.原始图片 男人牵着机器狗 2.轮廓提取 轮廓提取 3.最小包围轮廓 最小包围轮廓 4.凸包 凸包 5.凸包和最小包围轮廓的合照 凸包和最小包围轮廓的合照 上述图片中凸包、最小外围轮廓效果为作者实现算法生成。 图形几何之美系列&#…

【机器学习】决策树算法原理详解

决策树 1 概述 1.1 定义 决策树是一种解决分类问题的算法,决策树算法采用树形结构,使用层层推理来实现最终的分类。 决策树即可以做分类,也可以做回归。它主要分为两种:分类树 和 回归树。 1.2 决策树算法 第一个决策树算法…

基于深度学习的车牌检测系统的设计与实现(安卓、YOLOV、CRNNLPRNet)+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

中国省级金融发展水平指数(金融机构存款余额、贷款余额、GDP)2020-2023年

数据范围: 包含的数据内容如下: 分省份金融机构存款余额、分省份金融机构贷款余额、分省份金融机构存贷款余额、分省份GDP、分省份金融发展指数 西藏自治区、贵州省、黑龙江省2023年数据暂未公布,计算至2022年,其他省份数据无缺失…

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

如何在 Ubuntu 上安装 Mosquitto MQTT 代理 Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计…

【青牛科技】带 ALC 双通道前置放大器电路D3308

概述: D3308 是一块带有 ALC 的双通道前置放大器。它适用于立体声收录机 和盒式录音机。 采用 SIP9、SOP14 的封装形式封装。 主要特点: ● 带内置 ALC 回路的双通道均衡放大器。 ● 低噪声: VNI1.0V(典型值)。 …

Spring Cloud微服务下如何配置I8n

什么是I8n 国际化(I18n)指的是设计和开发产品的过程,使得它们能够适应多种语言和文化环境,而不需要进行大量的代码更改。这通常涉及到创建一个基础版本的产品,然后通过配置和资源文件来添加对不同语言和地区的支持。 这…

百度AI人脸检测与对比

1.注册账号 打开网站 https://ai.baidu.com/ &#xff0c;注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置&#xff1a; <!--百度AI--> <dependency> <groupId>com.baidu.…

MoeCTF 2024 web

ProveYourLove 前端页面限制了重复提交, 需要绕过, 可以通过BurpSuite抓包爆破, 或者代码直接发包 import requestsurlhttp://127.0.0.1:44395/questionnairedata {nickname: 1,target: 1,message: 1,user_gender: male,target_gender: male,anonymous: false }for i in ran…

使用WebHooks实现自动化工作流程的技术详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebHooks实现自动化工作流程的技术详解 文章目录 使用WebHooks实现自动化工作流程的技术详解引言WebHooks 的基本概念什么是…

如何通过低代码逻辑编排实现业务流程自动化?

随着数字化转型的加速&#xff0c;企业对高效、灵活的业务流程自动化需求日益增加。传统开发模式下的定制化解决方案往往周期长、成本高且难以适应快速变化的需求。低代码平台以其直观、简便的操作界面和强大的功能逐渐成为企业实现业务流程自动化的理想选择。本文将探讨低代码…

DNS记录类型详解(DNS Record Detailed Type)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

分布式专题-Redis核心数据结构精讲

1. redis安装&#xff1a; redis.conf是redis启动配置文件&#xff1b; redis连接&#xff1a; 数据类型&#xff1a; redis命令&#xff1a; String类型&#xff1a; INCRBY orderId 1000 是 Redis 数据库中的一个命令&#xff0c;用于将存储在键 orderId 中的整数值增加 10…

原生微信小程序中封装一个模拟select 下拉框组件

1.首先在components 里面设置组件名称&#xff1a;van-select&#xff08;随便取名字&#xff09;&#xff1b; 2.新建文件写代码&#xff1a; wxml&#xff1a; <view class"w100 select_all_view"><!-- 标题&#xff0c;可以没有 --><view class…

C++小白实习日记——Day 1 怎么跑github上下载的程序

研二&#xff0c;通信专业&#xff0c;实习&#xff0c;记录一下实习经历 在本地服务器跑github代码&#xff1a; 第一天老板给了一个github上的小项目链接让我看&#xff1a; https://github.com/MengRao/tscns 用git clone 命令下载下来&#xff0c;文件夹下有这些&#…

C++设计模式行为模式———迭代器模式

文章目录 一、引言二、迭代器模式三、总结 一、引言 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。C标准库中内置了很多容器并提供了合适的迭代器&#xff0c;尽管我们不…

常用Adb 命令

# 连接设备 adb connect 192.168.10.125# 断开连接 adb disconnect 192.168.10.125# 查看已连接的设备 adb devices# 安装webview adb install -r "D:\webview\com.google.android.webview_103.0.5060.129-506012903_minAPI23(arm64-v8a,armeabi-v7a)(nodpi)_apkmirror.co…

Redis-08 Redis集群

Redis槽位 Redis分片 Redis集群优势 主要掌握第三种 为什么槽位是16384&#xff1f; 三主三从&#xff1a; 每个主机只能写在自己的槽位 所以登录redis集群记得加参数 -c 比如redis-cli -a dc123 -p 6380 -c 加了 -c 相当于会进行路由转发&#xff0c;不属于自己槽位的…

《Django 5 By Example》阅读笔记:p645-p650

《Django 5 By Example》学习第8天&#xff0c;p645-p650总结&#xff0c;总计6页。 一、技术总结 1.django-rest-framework (1)serializer p648, Serializer: Provides serialization for normal Python class instances。Serializer又细分为Serializer, ModelSerializer,…