机器学习(西瓜书)-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.rhkb.cn/news/474214.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EEG+EMG学习系列 (1) :一个基于小波的自动睡眠评分模型

EEGEMG学习系列:一个基于小波的自动睡眠评分模型 0. 引言1. 主要贡献2. 提出的方法2.1 工作框图2.1 正交小波滤波器组2.2 小波分解2.3 特征提取 3. 结果4. 总结欢迎来稿 论文地址:https://www.mdpi.com/1660-4601/19/12/7176 论文题目:An Automated Wave…

自动化运维-检测Linux服务器CPU、内存、负载、IO读写、机房带宽和服务器类型等信息脚本

前言:以上脚本为今年8月1号发布的,当时是没有任何问题,但现在脚本里网络速度测试py文件获取不了了,测速这块功能目前无法实现,后面我会抽时间来研究,大家如果有建议也可以分享下。 脚本内容: #…

H.265流媒体播放器EasyPlayer.js网页直播/点播播放器WebGL: CONTEXT_LOST_WEBGL错误引发的原因

EasyPlayer无插件直播流媒体音视频播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。 EasyPlayer.js能够同时支持HTTP、HTTP-FLV、HLS&a…

OCRSpace申请free api流程

0.OCRSpace概述 OCR.Space是一款功能强大的在线光学字符识别(OCR)工具。 格式与语言支持广泛:支持多种图片格式,如 JPG、PNG、GIF、PDF 等作为输入。在语言方面,它支持英语、中文、法语、德语等20多种语言的文字识别…

Linux Kernel Programming 2

目录 书写内核框架 起手我们需要理解的是:用户态和内核态 库和系统调用 API 内核空间组件 探索 LKM(Linux Kernel Module体系) LKM 框架 内核源代码树中的内核模块 modinfo 动手!写年轻人的第一个内核模块程序 先试试看&…

机器学习基础04

目录 1.朴素贝叶斯-分类 1.1贝叶斯分类理论 1.2条件概率 1.3全概率公式 1.4贝叶斯推断 1.5朴素贝叶斯推断 1.6拉普拉斯平滑系数 1.7API 2.决策树-分类 2.1决策树 2.2基于信息增益的决策树建立 2.2.1信息熵 2.2.2信息增益 2.2.3信息增益决策树建立步骤 2.3基于基…

ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF

ChatGPT academic项目是由中科院团队基于ChatGPT专属定制。论文润色、语法检查、中英互译、代码解释等可一键搞定,堪称科研神器。 功能介绍 我们以3.5版本为例,ChatGPT学术版总共分为五个区域:输入控制区、输出对话区、基础功能区、函数插件…

fpga 同步fifo

FIFO 基础知识 FIFO(First In First Out,即先入先出),是一种数据缓存器,用来实现数据先入先出 的读写方式。在 FPGA 或者 ASIC 中使用到的 FIFO 一般指的是对数据的存储具有先入先出 特性的缓存器,常被用于…

模式:每个服务一个数据库

Pattern: Database per service。 背景 如用微服务架构模式开发一个在线商店应用程序。大多数服务需要在某种数据库中持久化数据。如,订单服务存储订单信息,而客户服务存储客户信息。 问题 微服务应用程序中的数据库架构是什么? 驱动力…

Java 全栈知识体系

包含: Java 基础, Java 部分源码, JVM, Spring, Spring Boot, Spring Cloud, 数据库原理, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, 分布式, 中间件, 开发工具, Git, IDE, 源码阅读,读书笔记, 开源项目...

WebRTC实现双端音视频聊天(Vue3 + SpringBoot)

目录 概述 相关概念 双端连接整体实现步骤概述 文章代码实现注意点 STUN和TURN服务器的搭建 开发过程描述 后端开发流程 前端开发流程 效果演示 Gitee源码地址 概述 文章描述使用WebRTC技术实现一对一音视频通话。 由于设备摄像头限制(一台电脑作测试无法…

机器学习3

六、朴素贝叶斯分类 背景知识:第三大点的第4点:概率 基础定义_数学概率中事件的定义-CSDN博客 1、条件概率 𝑃(𝐴|𝐵)𝑃(𝐴∩𝐵)/𝑃(𝐵) :A事件在…

SpringBoot Data Redis连接Redis-Cluster集群

使用SpringBoot Data Redis无法连接Redis-Cluster集群 最近在研究系统高并发下的缓存架构,因此自己在自己买的云服务器上搭建好Redis 5.0 版本的集群后,使用springboot的 RedisTemplate连接是发现总是访问不到集群节点。上网百度了发现没有好的解决办法&…

网页作业9

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>服务中心</title><style>* {margin:…

基于yolov8、yolov5的行人检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;行人检测在交通管理、智能监控和公共安全中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监控人群动态&#xff0c;还为自动化监控系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的行人检测模型&#xff0c;该模型使用了…

递归(3)----力扣40组合数2,力扣473火柴拼正方形

给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6,1…

1Panel 推送 SSL 证书到阿里云、腾讯云

本文首发于 Anyeの小站&#xff0c;点击链接 访问原文体验更佳 前言 都用 CDN 了还在乎那点 1 年证书钱么&#xff1f; 开句玩笑话&#xff0c;按照 Apple 的说法&#xff0c;证书有效期不该超过 45 天。那么证书有效期的缩短意味着要更频繁地更新证书。对于我这样的“裸奔”…

通过shell脚本分析部署nginx网络服务

通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 [rootlocalhost xzy]# vim 1.sh [rootlocalhost xzy]# chmod x 1.sh [rootlocalhost xzy]# ./1.sh2.判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&…

tcp 超时计时器

在 TCP&#xff08;传输控制协议&#xff09;中有以下四种重要的计时器&#xff1a; 重传计时器&#xff08;Retransmission Timer&#xff09; 作用&#xff1a;用于处理数据包丢失的情况。当发送方发送一个数据段后&#xff0c;就会启动重传计时器。如果在计时器超时之前没有…

华为云租户网络-用的是隧道技术

1.验证租户网络是vxlan 2.验证用OVS 2.1控制节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.8 2.2计算节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.11 计算节点用的是bond0做隧道网络 2.3查看bond文件是否主备模式