数学建模:BP神经网络(含python实现)

原理

  BP 神经网络,也称为多层感知机(Multilayer Perceptron,MLP),是一种常见的神经网络模型,用于解决各种机器学习问题,包括分类和回归。BP 代表"反向传播"(Backpropagation),这是该模型训练的关键算法。

  BP 神经网络由多个神经元组成,通常分为输入层、隐藏层和输出层。每个神经元都与前一层的每个神经元相连,并且具有权重,用于调整信号的传递和计算。BP 神经网络的原理基于前向传播和反向传播两个关键步骤。

  前向传播是在前向传播过程中,输入信号从输入层传递到隐藏层和输出层,每个神经元将其输入与权重相乘并应用激活函数来产生输出。这个过程一直持续到达输出层,生成网络的预测结果。输入层到隐藏层公式: z j = ∑ i = 1 n w j i ( 1 ) x i z_j=\sum_{i=1}^{n}w_{ji}^{(1)}x_i zj=i=1∑nwji(1)xi α j = f ( z j ) \alpha_j=f(z_j) αj=f(zj)  输入层到隐藏层公式: z k = ∑ j = 1 m w k i ( 2 ) α j z_k=\sum_{j=1}^{m}w_{ki}^{(2)}\alpha_j zk=j=1∑mwki(2)αj α k = f ( z k ) \alpha_k=f(z_k) αk=f(zk)  其中, z j z_j zj和 z k z_k zk分别表示隐藏层和输出层神经元的加权输入, α j \alpha_j αj和 α k \alpha_k αk表示它们的激活输出,𝑤是权重,𝑥是自变量,𝑓是激活函数。

  反向传播是在反向传播过程中,网络的输出与实际目标进行比较,以计算误差。然后,误差通过网络反向传播,根据链式规则,将误差分配给每个神经元,并根据误差调整权重,以减小误差。这个过程重复进行多次,直到误差收敛到满意的水平或达到预定的训练轮次。其公式如下: Δ w k j ( 2 ) = − η ∂ E ∂ w k j ( 2 ) \Delta w_{kj}^{(2)}=-\eta \frac{\partial E}{\partial w_{kj}^{(2)}} Δwkj(2)=−η∂wkj(2)∂E Δ w j i ( 1 ) = − η ∂ E ∂ w j i ( 1 ) \Delta w_{ji}^{(1)}=-\eta \frac{\partial E}{\partial w_{ji}^{(1)}} Δwji(1)=−η∂wji(1)∂E  其中,其中,𝜂是学习率,∂𝐸,∂𝑤表示误差关于权重的偏导数。误差计算中通常使用均方误差(Mean Squared Error,MSE)作为误差函数: E = 1 2 ∑ k = 1 p ( t k − α k ) 2 E=\frac12\sum_{k=1}^p(t_k-\alpha_k)^2 E=21k=1∑p(tk−αk)2  其中, t k t_k tk是目标输入, α k \alpha_k αk是网络的实际输出。

  BP神经网络结构:

代码

多层感知机实际上就是多层全连接网络构成的网络,一个示例代码:

c 复制代码
import tensorflow as tf
from tensorflow import keras

# 定义模型
model = keras.Sequential([
    keras.layers.Dense(64, activation='relu', input_shape=(X.shape[1],)),
    keras.layers.Dense(32, activation='sigmoid'),
    keras.layers.Dense(1, activation='sigmoid')
])
# model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# model.fit(X_train, Y_train, epochs=100, batch_size=32, validation_split=0.05)
# odel = keras.Sequential([
#     keras.layers.Dense(128, activation='relu', input_shape=(X.shape[1],)),
#     keras.layers.Dense(64, activation='sigmoid'),
#     keras.layers.Dense(32, activation='relu'),
#     keras.layers.Dense(16, activation='sigmoid'),
#     keras.layers.Dense(8, activation='relu'),
#     keras.layers.Dense(1, activation='sigmoid')
# ])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 模型训练
history=model.fit(X_train, Y_train, epochs=60, batch_size=32, validation_split=0.5)
c 复制代码
# 模型评估
test_loss, test_accuracy = model.evaluate(X_test, Y_test)
print(f'Test accuracy: {test_accuracy}')
# 使用表1的所有行进行水肿概率的预测
# all_predictions = model.predict(X2)
# all_predictions
相关推荐
王小王-1234 分钟前
基于Python的车联网数据聚合与可视化分析平台设计与实现
python·车联网·新能源汽车·车联网聚合分析
叫我:松哥30 分钟前
基于Flask框架的校园二手书籍交易平台,注重校园场景的特殊需求,通过学号认证保障用户真实性
后端·python·sqlite·flask·bootstrap
namexingyun42 分钟前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
通信仿真爱好者1 小时前
第【17】期--考虑硬件损伤和不完美CSI的RIS-MISO系统的深度强化学习联合优化-python完整代码+参考文献
python·深度强化学习·ris
装不满的克莱因瓶1 小时前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
ptc学习者1 小时前
python 中描述符@property property 大概的样子
开发语言·python
zmzb01031 小时前
Python课后习题训练记录Day129
开发语言·python
秋91 小时前
Python工程师面试常问提问和回答(AI工程化方向 · 2026版)
人工智能·python·面试
数学建模导师1 小时前
[国一版本]2026亚太杯中文赛B题成品论文35页!【附带1-5问完整可执行代码、最终结果、高清可视化图】
数学建模
炎武丶航1 小时前
LeNet-5深度学习详解:从手写数字识别到代码实战
人工智能·python·深度学习·机器学习·ai·cnn·lenet