跳转到主内容
极星编程网:以代码为星,赴技术山海!

一文讲透BP神经网络模型(附代码)

目录 一、情景导入 二、模型介绍 (一)BP 神经网络:一个会 “学习” 的 “小型脑瓜” (二)激活函数:给 “小成员” 装上 “开关” 三、模型原理 01、模型结构 02、前向传播(Forward Propagation) 03. 损失函数(Loss Function) 04. 反向传播(Back Propagation) 05. 激活函数(Activation Function) 四、应用场景 五、示例代码:用 Python 实现简单 BP 神经网络 一、情景导入 你有没有想过,手机刷脸解锁时,它是怎么一眼认出你的?

语音助手能听懂你的指令,背后又藏着什么玄机?

其实,这些黑科技的背后,都少不了一个 “幕后功臣”——BP 神经网络。

今天,咱们就用几分钟,把这个听起来高深的模型聊得明明白白。

二、模型介绍 (一)BP 神经网络:一个会 “学习” 的 “小型脑瓜” 别急着被 “神经网络” 这四个字吓住,其实它很接地气。

咱们可以把 BP 神经网络想象成一个 “小型决策团队”。

这个团队里有很多 “小成员”(神经元),它们分成好几排(层):最前面的是 “接收信息员”(输入层),负责接收各种数据,比如图片的像素点、声音的波形;中间的是 “分析员”(隐藏层),会对信息进行层层处理;最后面的是 “输出员”(输出层),给出最终结果,比如 “这是张三的脸”“这句话是让打开空调”。

而 “BP”(反向传播)呢,就是这个团队的 “学习秘籍”。

就像我们做错题目后会回头检查哪里出错一样,当输出结果不对时,它会从后往前找原因,调整各个 “成员” 之间的配合(权重),下次就能做得更好。

从数学角度看,BP 神经网络的学习过程是通过梯度下降算法来最小化损失函数的。

损失函数用于衡量预测值与实际值之间的差异,比如均方误差损失函数。

反向传播就是利用链式法则计算损失函数对各权重的偏导数,进而更新权重,使损失函数不断减小。

(二)激活函数:给 “小成员” 装上 “开关” 要是每个 “小成员” 只是简单传递信息,那和传话筒没啥区别。

激活函数就是给它们装上 “智能开关”,决定什么时候该 “兴奋”(输出信号),什么时候该 “安静”(不输出信号)。

Sigmoid 函数 :像个 “犹豫的判官”。

它会把输入的信息处理成 0 到 1 之间的数,数值越接近 1,说明 “越想发言”。

比如在判断 “这张图是不是猫” 时,它可能给出 0.8 的结果,意思是 “有 80% 的把握是猫”,适合需要概率判断的场景。

ReLU 函数 :像个 “急性子门卫”。

只要输入是正数,它就直接放行(输出原来的数);要是负数,就直接关门(输出 0)。

它计算快、效率高,在处理大量图片、视频数据时特别给力,现在很多场景都爱用它。

Tanh 函数 :像个 “爱憎分明的评论家”。

它会把输入变成 - 1 到 1 之间的数,正数越大表示 “越支持”,负数越小表示 “越反对”。

在处理语音信号这类有正有负的波动数据时,它表现得很出色。

激活函数的作用是引入非线性因素,使得神经网络可以拟合复杂的非线性函数。

如果没有激活函数,无论神经网络有多少层,都只能实现线性映射,难以处理复杂的现实问题。

三、模型原理 BP(Back Propagation,反向传播)神经网络是一种 多层前馈神经网络 ,通过 误差反向传播算法 进行训练,广泛应用于分类、回归、模式识别等任务。

01、模型结构 BP神经网络通常由三部分组成: 输入层(Input Layer) :接收原始数据(如像素、特征向量)。

隐藏层(Hidden Layer) :1层或多层,负责非线性变换。

输出层(Output Layer) :输出预测结果(如分类概率、回归值)。

每层由多个 神经元(Neuron) 组成,神经元之间通过 权重(Weight) 连接,并经过 激活函数(Activation Function) 进行非线性映射。

02、前向传播(Forward Propagation) 输入数据从输入层逐层计算,直至输出层。

数学表示 输入层→隐藏层 :

隐藏层→输出层 :

03. 损失函数(Loss Function)

04. 反向传播(Back Propagation) 核心思想: 链式求导 ,从输出层反向调整权重和偏置,使损失最小化。

步骤 05. 激活函数(Activation Function) 引入非线性,使网络能拟合复杂函数。

常见激活函数: 函数公式特点 Sigmoidσ(z)=11+e−zσ(z)=1+e−z1​输出(0,1),适合概率ReLUReLU(z)=max⁡(0,z)ReLU(z)=max(0,z)计算快,缓解梯度消失Tanhtanh⁡(z)=ez−e−zez+e−ztanh(z)=ez+e−zez−e−z​输出(-1,1),适合有正负的数据 四、应用场景 BP 神经网络的 “超能力”:在生活中无处不在 别以为它只存在于实验室,其实它早就渗透到我们生活的方方面面啦。

人脸识别 :手机解锁、支付宝刷脸付款时,BP 神经网络在飞快地对比你脸上的特征点,几毫秒内就完成 “是不是本人” 的判断。

语音助手 :当你对着手机说 “明天天气怎么样”,它能把你的声音转换成文字,再理解意思,这背后就有 BP 神经网络在帮它 “听懂” 人话。

用户画像:刷短视频时,平台总能推你喜欢的内容;逛电商平台时,“猜你喜欢” 栏目总能戳中你的心。

这都离不开BP神经网络对用户画像的分类识别。

五、示例代码:用 Python 实现简单 BP 神经网络

# 导入所需库

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPClassifier from sklearn.metrics import accuracy_score # 加载数据 iris = load_iris() X = iris.data # 特征数据,包括花萼长度、花萼宽度、花瓣长度、花瓣宽度 y = iris.target # 标签数据,0、1、2分别代表三种鸢尾花 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建BP神经网络模型,这里使用MLPClassifier,其底层实现了BP算法 # hidden_layer_sizes=(10,)表示隐藏层有10个神经元,activation='relu'使用ReLU激活函数 # solver='adam'使用adam优化器,max_iter=300表示最大迭代次数 model = MLPClassifier(hidden_layer_sizes=(10,), activation='relu', solver='adam', max_iter=300, random_state=42) # 训练模型 model.fit(X_train, y_train) # 在测试集上进行预测 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"模型在测试集上的准确率为:{accuracy:.2f}")  Python实现简单BP神经网络,以鸢尾花数据集为例进行分类任务。

代码使用sklearn库的MLPClassifier,创建模型包含输入层、隐藏层(10个神经元)和输出层。

加载数据后,划分训练集和测试集,模型通过fit方法训练,学习特征与标签关系。

激活函数选用ReLU,优化器为Adam,最大迭代300次。

训练过程调整权重,最小化损失,提升泛化能力。

测试集预测后,计算准确率评估模型性能。

示例中准确率可达95%以上,显示模型高效性。

代码可修改参数,如隐藏层大小或激活函数类型,观察对结果的影响。

例如,增加神经元至20个或改用Sigmoid,分析准确率变化。

这种实践帮助用户深入理解反向传播机制,应用于实际项目如数据分析或AI开发。

关注【小小科研】公众号,学习更多模型哦,感谢支持!

相关文章