【代码】python实现一个BP神经网络-原理讲解与代码展示

数学建模——BP神经网络模型Python代码 数学建模——BP神经网络模型Python代码 # -*- coding: utf-8 -*- """ Created on Mon Oct 1 22:15:54 2018 @author: Heisenberg """ import numpy as np import math import random import string import matplotlib as mpl import matplotlib.pyplot as plt #random.seed(0) #当我们设置相同的s 阅读详情
AI摘要

本文详细介绍如何使用PyTorch实现BP神经网络,包括BP神经网络的基本原理、结构回顾及训练算法流程,并通过具体代码实例展示如何在Python环境下搭建并训练一个BP神经网络模型。

​

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/


在python中要如何使用代码实现一个BP神经网络呢?
在python中可以利用pytorch来实现BP神经网络,这是最简洁也是最常用的方法。
通过本文可以详细掌握怎么使用python的pytorch来实现一个BP神经网络。

一、BP神经网络原理回顾

1.1 BP神经网络的结构简单回顾

BP神经网络的结构如下:
BP神经网络结构图
BP神经网络由输入层、隐层、输出层组成,其中隐层可以是有多层的,整个网络以前馈式进行计算,也就是每层的输出作为下层的输入,不断套娃,直到输出层

每层的计算公式如下:
y = T ( W X + B ) y=T(WX+B) y=T(WX+B)
其中,
X:该层的输入
W:该层的权重
B:该层的阈值
T:该层的激活函数

1.2.BP神经网络的训练算法流程

梯度下降算法求解BP神经网络的流程如下:
梯度下降算法求解BP神经网络

一、先初始化一个解                                                 
二、迭代                                                                  
1. 计算所有w,b在当前处的梯度dw,db           
2. 将w,b往负梯度方向更新:                       
   w = w-lr*dw                       
   b = b-lr*db       
3. 判断是否满足退出条件,如果满足,则退出迭代

二、python实现BP神经网络代码

在python中只需要使用pytorch就可以简单实现BP神经网络,而且提供了丰富的训练算法。

2.1.数据介绍

为方便理解,不妨采用以下的简单数据:
在这里插入图片描述
上述即为sin函数在[-5,5]之间的20个采样数据

2.2.pytorch实现BP神经网络代码

下面展示在pytorch中实现BP神经网络的代码
特别说明:需要先安装pytorch包

import torch
import matplotlib.pyplot as plt 
torch.manual_seed(99)

# -----------计算网络输出:前馈式计算---------------
def forward(w1,b1,w2,b2,x):                                   
    return w2@torch.tanh(w1@x+b1)+b2

# -----------计算损失函数: 使用均方差--------------
def loss(y,py):
    return ((y-py)**2).mean()

# ------训练数据----------------
x = torch.linspace(-5,5,20).reshape(1,20)                      # 在[-5,5]之间生成20个数作为x
y = torch.sin(x)                                               # 模型的输出值y

#-----------训练模型------------------------
in_num  = x.shape[0]                                            # 输入个数
out_num = y.shape[0]                                            # 输出个数
hn  = 4                                                         # 隐节点个数
w1  = torch.randn([hn,in_num],requires_grad=True)               # 初始化输入层到隐层的权重w1
b1  = torch.randn([hn,1],requires_grad=True)                    # 初始化隐层的阈值b1
w2  = torch.randn([out_num,hn],requires_grad=True)              # 初始化隐层到输出层的权重w2
b2  = torch.randn([out_num,1],requires_grad=True)               # 初始化输出层的阈值b2

lr = 0.01                                                       # 学习率
for i in range(5000):                                           # 训练5000步
    py = forward(w1,b1,w2,b2,x)                                 # 计算网络的输出
    L = loss(y,py)                                              # 计算损失函数
    print('第',str(i),'轮:',L)                                 # 打印当前损失函数值
    L.backward()                                                # 用损失函数更新模型参数的梯度
    w1.data=w1.data-w1.grad*lr                                  # 更新模型系数w1
    b1.data=b1.data-b1.grad*lr                                  # 更新模型系数b1
    w2.data=w2.data-w2.grad*lr                                  # 更新模型系数w2
    b2.data=b2.data-b2.grad*lr                                  # 更新模型系数b2
    w1.grad.zero_()                                             # 清空w1梯度,以便下次backward
    b1.grad.zero_()                                             # 清空b1梯度,以便下次backward
    w2.grad.zero_()                                             # 清空w2梯度,以便下次backward
    b2.grad.zero_()                                             # 清空b2梯度,以便下次backward
px = torch.linspace(-5,5,100).reshape(1,100)                    # 测试数据,用于绘制网络的拟合曲线    
py = forward(w1,b1,w2,b2,px).detach().numpy()                   # 网络的预测值
plt.scatter(x, y)                                               # 绘制样本
plt.plot(px[0,:],py[0,:])                                       # 绘制拟合曲线  
print('w1:',w1)
print('b1:',b1)
print('w2:',w2)
print('b2:',b2)

运行结果如下:

.....                                            
第 4996 轮: tensor(0.0083, grad_fn=<MeanBackward0>)
第 4997 轮: tensor(0.0083, grad_fn=<MeanBackward0>)
第 4998 轮: tensor(0.0083, grad_fn=<MeanBackward0>)
第 4999 轮: tensor(0.0083, grad_fn=<MeanBackward0>)
w1: tensor([[ 0.1742],[-0.8133],[-0.6450],[-0.4054]],requires_grad=True)
b1: tensor([[ 0.8125],[0.0593],[-1.8776],[1.1220]],requires_grad=True)
w2: tensor([[-0.7753,-2.0142,1.1161,1.9635]],requires_grad=True)
b2: tensor([[0.1094]], requires_grad=True)   

运行结果
可以看到,模型根据训练数据,已经较好地拟合出sin函数曲线


相关链接:

《老饼讲解-机器学习》:老饼讲解-机器学习教程-通俗易懂
《老饼讲解-神经网络》:老饼讲解-matlab神经网络-通俗易懂
《老饼讲解-神经网络》:老饼讲解-深度学习-通俗易懂

神经网络中BP算法的原理与用Python实现源码 (1)什么是梯度下降和链式求导法则 1.梯度下降 假设我们有一个函数J(w),如下图所示。 现在,我们要求当w等于什么的时候,J(w)能够取到最小值。从图中我们知道最小值在初始位置的左边,也就意味着如果想要使J(w)最小,w的值需要减小。而初始位置的切线斜率a>0(也是该位置对应的导数大于0),w=w-eta*a(eta是学习率)就能让w的值减小,循环求导更新w直到J(w)取到最 阅读详情

相关推荐

BP神经网络算法 原理讲解以及底层代码复现

这里写自定义目录标题新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 BP神经网络算法python 底层 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔

weixin_52328678的博客 3966

BP神经网络及python实现(详细)

本篇文章关于BP神经网络的算法实现相对来说通俗易懂,讲解下至关于函数变量的解释,上至关于BP算法中涉及的前向传播及反向传播的原理、再至其过程中涉及的公式详细推导都有笔者的一些思考笔记。本文也对标准的BP神经网络进行几处改进,目的都是为了提高训练速度。另外,若文章存在一些理论错误请各位不吝赐教,当然,在阅读过程中若有些地方不明白可以在评论区留言!

weixin_66845445的博客 5万+

Python实现BP神经网络

Python实现BP神经网络

corn1949的博客 933

基于pytorch的BP神经网络实现

pytorch神经网络实现BP神经网络

weixin_60737527的博客 1万+

Python实现BP神经网络算法详解与源代码

误差反向传播是BP神经网络训练的核心。其主要思想是将网络输出结果与真实结果进行比较,然后计算误差,并反向传播误差,最小化误差来调整网络参数,使得网络输出结果更接近真实结果。本文将介 绍BP神经网络的基本原理及其Python实现。BP神经网络由输入层、隐藏层和输出层组成。其中,输入层接受原始数据,隐藏层进行数据特征提取和转换,输出层输出预测结果。下面通过一个简单的例子来说明BP神经网络算法的实现。我们使用一个简单的例子来测试我们的代码,该例子实现异或门的预测功能。运行上面的代码,我们将得到异或门的预测结果。

持续更新 2589

BP神经网络(python实现)

BP神经网络的学习属于有监督学习,需要一组已知期望输出的学习样本集。训练时先使用随机值作为权值(即权重,取值在前向传播部分有介绍),输入学习样本得到网络的输出。然后根据输出值与期望输出计算误差,再由误差根据某种准则逐层修改权值,使误差减小。如此反复,直到误差不再下降,网络就完成训练。

2303_78738507的博客 5592

BP神经网络python简单实现

最近在做神经网络,觉得这篇博文写的满好的,转载慢慢看,原文地址: https://www.cnblogs.com/Finley/p/5946000.html 人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善. 联想大家熟悉的回归问题, 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数, 并使用该函数进行预测, 网络的训练过程即为调节该函数参数提高预测...

qq_30501975的博客 4873

BP神经网络入门实践:使用Python实现BP神经网络

本文还有配套的精品资源,点击获取 简介:BP神经网络,即反向传播神经网络,是一种用于监督学习的典型人工神经网络模型。本压缩包包含了一个基于Python的简单BP神经网络实现,为初学者提供了一个理解神经网络基本原理和编程技能的平台。该实现涵盖关键概念如激活函数、损失函数、梯度下降法以及反向传播算法。学生可以通过实践了解网络结构定义、权重初始化、前向传播、反向传播及训练过程。此...

weixin_42509507的博客 2364

神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)

神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)

weixin_56619527的博客 6万+

用Python实现BP神经网络(附代码)

用Python实现出来的机器学习算法都是什么样子呢? 前两期线性回归及逻辑回归项目已发布(见文末链接),今天来讲讲BP神经网络。 BP神经网络 全部代码 https://github.com/lawlite19/MachineLearning_Python/blob/master/NeuralNetwok/NeuralNetwork.py 神经网络model 先介绍个三层的神经网络,如下图所示 输入层(input layer)有三个units( 为补上的bias,通常设为1) 表示第j层的第i个激励,也称为为单元unit 为第j层到第j+1层映射的权重矩阵,就是每条边的权重 所以可以得

Ubuntu 24.04下Loki+Alloy+Grafana日志分析系统的快速部署与实践

本文详细介绍了在Ubuntu 24.04系统上快速部署Loki+Alloy+Grafana轻量级日志分析系统的完整流程。通过二进制安装Loki、配置Alloy采集器以及设置Grafana可视化界面,构建了一套资源消耗低、易于管理的日志解决方案,并实战演示了如何采集和分析网络设备日志,特别适合资源有限的中小团队或边缘计算场景。

tensor9flow的博客 233

深度学习(神经网络) —— BP神经网络原理推导及python实现

深度学习(神经网络) —— BP神经网络原理推导及python实现摘要(一)BP神经网络简介1、神经网络权值调整的一般形式为:2、BP神经网络中关于学习信号的求取方法:(二)BP神经网络原理推导1、变量说明2、BP算法推导(三)BP神经网络python实现1、模型所需传参介绍2、模型具有的主要方法和属性3、python代码4、代码运行结果 摘要 本文首先介绍了BP神经网络求取学习信号的方法,其次对BP神经网络在原理上进行了推导,最后在python上进行编程实现,并将其封装,方便读者直接调用。 (一)BP神经

Cyrus_May的博客 7265

Mathcad在LLC谐振变换器设计中的公式推导实战

本文通过Mathcad软件,详细演示了LLC谐振变换器设计的核心公式推导实战。文章阐述了如何利用Mathcad作为“会思考的草稿纸”,从定义基本参数、应用基波近似法(FHA)模型,到逐步推导电压增益公式及确定工作边界频率(fmin, fmax),并展示了如何通过动态参数扫描进行优化设计,帮助电源工程师高效、直观地完成理论计算,为后续仿真与实现奠定坚实基础。

q1w3e5r7t9y的博客 293

BP 神经网络模型:原理、实现与应用

BP 神经网络作为一种强大的机器学习模型,具有广泛的应用前景。通过理解其原理、结构和学习算法,并通过代码实现,可以更好地掌握如何应用 BP 神经网络解决实际问题。然而,BP 神经网络也存在一些局限性,如容易陷入局部最小值、训练时间较长等。在实际应用中,需要根据具体问题对网络进行优化和改进,同时也可以结合其他机器学习算法来提高性能。随着技术的不断发展,BP 神经网络在各个领域的应用将会不断拓展和深入,为人类的生产和生活带来更多的便利。

梵心白莲的博客 8197

UDS服务应该支持哪些否定响应码

UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组: 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。 0x01 – 0x7F:诊断通信相关的否定响应码。 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定

闲聊汽车软件开发 4万+

网络可视化工具netron详细安装流程

netron安装目录1.netron 简介2.不同操作系统下的安装使用方式2.1 在线版本:只要有浏览器就可以2.2 不同操作系统安装使用3.netron支持的网络框架4.netron测试演示 1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构。如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构。 这时,就可以使用netron可视化工具,可以清晰的看到每一层的输入输出,网络总体的架构,而且支持各种不同网络框架,简单好用。 2.不同操作系统下的安装使用方式 2.1

江南研习社 12万+

BP神经网络

理论加代码

hcxddd的博客 1万+

【Python爬虫】爬取企业专利信息

本来是个美好的周末的,但是周五晚上领导给了一个公司名称的Excel,让把这些公司的专利信息爬取下来。本文记录了爬取企业专利信息的心酸过程。码字不易,喜欢请点赞!!! 一、找寻目标网页 在接到这个任务之后,我的内心是拒绝的。但是又不能不干。因此首先我需要先找到有公司专利信息的地方。在一番查找和问了问朋友之后,我知道中国专利网、国家知识产权网、Incopat、天眼查、企查查这些网站上面都有企业的专利...

Asher117的博客 2万+

使用numpy实现BP神经网络(python代码细节展示)

BP神经网络 算法:后向传播,使用后向传播算法,学习分类或预测的神经网络 输入: .D: 由训练元祖和其相关联的目标值组成的数据集 L:学习率 输出:训练后的神经网络 numpy中的中的高斯分布的概率密度函数np.random.normal() 其中,np.random.normal(mean=0.0, stdev=1.0, size=None) loc表示均值,scale是标准差(scale...

chang_rj的博客 1万+

【FISCO-BCOS】 八、ubuntu配置Java环境

ubuntu配置Java环境需根据自己的java版本号进行细节修改,本文以jdk11.0.18版本为例。ps:通过此法还可以查看java安装路径,但必须是环境配置成功的情况下才能使用。二、添加Java环境路径。四、检查java环境设置。

naihe_fish的博客 4307

【DNN实现二分类模型推理部署(C#)----20240712】

【DNN实现二分类模型推理部署(C#)----20240712】

weixin_44119674的博客 210

机器学习——BP神经网络详细介绍及案例Python代码实现

机器学习——BP神经网络详细介绍及案例Python代码实现 BP(Back Propagation)网络 也称误差反向传播,1985年由Rumelhart 和 McCelland提出

杨老师的小跟班(*∩_∩*) 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

算法介绍及实现——BP神经网络(基于Python-torch)

BP算法是我接触到的第一个算法,可谓是梦开始的地方,算法专栏用它作为开篇再合适不过了。 目录 1、什么是BP神经网络? 2、BP神经网络的原理? 3、BP神经网络如何实现? 4、总结 1、什么是BP神经网络? BPNN是一种当下的应用比较广泛的智能算法,是MLP的一种,是用于寻找数据集中非线性的、复杂的数据关系。它是基于生物神经网络的原型,对其进行抽象和模拟,模仿人脑思考问题的方式和方法,能很好的去发掘数据之间的相关性。其主要用去数据的建模和预测。其结果如下图所示: ...

weixin_51009494的博客 7182

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python实现BP神经网络算法(理论+例子+程序)

通过本文的理论阐述、具体实例以及Python程序实现,我们深入理解了BP神经网络的核心机制及其在Python环境下的构建方法。在实际操作中,针对具体问题的不同,我们可能需要灵活调整网络架构、学习速率、激活函数等参数,以优化模型性能。此外,借助TensorFlow、PyTorch等成熟的深度学习框架,我们能够更加高效便捷地构建和训练神经网络模型。本文旨在为读者提供一条清晰、系统的BP神经网络学习路径,并为后续的研究与实际应用奠定坚实的基础。

Python老吕的博客 4445

BP神经网络(python代码)

神经网络是深度学习的基础。个人理解神经网络就是可以拟合任何一种广义线性模型的结构,本文主要记录python代码的学习笔记。

骆驼分析师的博客 1万+
上一篇: 【详细】一步一步实现一个BP神经网络-逐行代码解说
下一篇: BP神经网络的反向传播(Back Propagation)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老饼讲解-BP神经网络

请老饼喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值