# 【Python机器学习】神经网络中误差反向传播（BP）算法详解及代码示例（图文解释 附源码）

## 误差反向传播学习算法

BP学习算法可分为前向传播预测与反向传播学习两个过程。

Sigmoid函数的导数为：

### 前向传播预测过程

for j in range(2000):
print("\n\n轮：", j)
E = 0.0
for i in range(4):
print("样本：", i)
print("实例：", XX[i])
print("标签", L[i])
### 前向传播预测
# 计算第1隐层的输出
Y1[0] = y_1_1(W1, theta1, XX[i])
Y1[1] = y_1_2(W1, theta1, XX[i])
#print("第1隐层的输出:", Y1)
# 计算第2隐层的输出
Y2[0] = y_2_1(W2, theta2, Y1)
Y2[1] = y_2_2(W2, theta2, Y1)
print("第2隐层的输出:", Y2)
### 后向传播误差
# 计算第2隐层的校对误差
E2[0] = Y2[0] - L[i][0]
E2[1] = Y2[1] - L[i][1]
E += 0.5*(E2[0]*E2[0]+E2[1]*E2[1])
#print("总误差", E)
#print("第2隐层的校对误差", E2)
# 计算第1隐层的校对误差
E1[0] = E2[0]*Y2[0]*(1 - Y2[0])*W2[0,0] + E2[1]*Y2[1]*(1 - Y2[1])*W2[0,1]
E1[1] = E2[0]*Y2[0]*(1 - Y2[0])*W2[1,0] + E2[1]*Y2[1]*(1 - Y2[1])*W2[1,1]
#print("第1隐层的校对误差", E1)
### 更新系数
# 更新第2隐层的系数
W2[0,0] = W2[0,0] - a*E2[0]*Y2[0]*(1 - Y2[0])*Y1[0]
W2[1,0] = W2[1,0] - a*E2[0]*Y2[0]*(1 - Y2[0])*Y1[1]
theta2[0] = theta2[0] - a*E2[0]*Y2[0]*(1 - Y2[0])
W2[0,1] = W2[0,1] - a*E2[1]*Y2[1]*(1 - Y2[1])*Y1[0]
W2[1,1] = W2[1,1] - a*E2[1]*Y2[1]*(1 - Y2[1])*Y1[1]
theta2[1] = theta2[1] - a*E2[1]*Y2[1]*(1 - Y2[1])
#print("第2隐层的连接系数", W2)
#print("第2隐层的阈值系数", theta2)
# 更新第1隐层的系数
W1[0,0] = W1[0,0] - a*E1[0]*Y1[0]*(1 - Y1[0])*XX[i][0]
W1[1,0] = W1[1,0] - a*E1[0]*Y1[0]*(1 - Y1[0])*XX[i][1]
theta1[0] = theta1[0] - a*E1[0]*Y1[0]*(1 - Y1[0])
W1[0,1] = W1[0,1] - a*E1[1]*Y1[1]*(1 - Y1[1])*XX[i][0]
W1[1,1] = W1[1,1] - a*E1[1]*Y1[1]*(1 - Y1[1])*XX[i][1]
theta1[1] = theta1[1] - a*E1[1]*Y1[1]*(1 - Y1[1])
#print("第1隐层的连接系数", W1)
#print("第1隐层的阈值系数", theta1)
print("平均总误差" + str(E/4.0))

### 下面用深度学习框架Tensorflow来模拟异或运算

[0.43767142，0.56202793]→[0.，1.]，

[0.5493321，0.45261452]→[1.，0.]，

[0.575727，0.42299467]→[1.，0.]，

[0.43716326，0.5625658 ]→[ 0.，1.]。

import tensorflow as tf
import numpy as np
# 样本实例
XX = np.array([[0.0,0.0],
[0.0,1.0],
[1.0,0.0],
[1.0,1.0]])
# 样本标签
L = np.array([[0.0,1.0],
[1.0,0.0],
[1.0,0.0],
[0.0,1.0]])
tf_model = tf.keras.Sequential([
tf.keras.layers.Dense(2, activation='sigmoid', input_shape=(2,), kernel_initializer='random_uniform', bias_initializer='zeros'),
tf.keras.layers.Dense(2, activation='sigmoid', kernel_initializer='random_uniform', bias_initializer='zeros')
])
tf_model.compile(optimiaer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.mean_squared_error, metrics=['accuracy'])
tf_model.summary()
tf_model.fit(XX, L, batch_size=4, epochs=2000, verbose=1)
tf_model.evaluate(XX, L)

|
17天前
|

Machine Learning机器学习之决策树算法 Decision Tree（附Python代码）
Machine Learning机器学习之决策树算法 Decision Tree（附Python代码）
45 0
|
2天前
|

《Python 简易速速上手小册》第9章：数据科学和机器学习入门（2024 最新版）
《Python 简易速速上手小册》第9章：数据科学和机器学习入门（2024 最新版）
14 1
|
3天前
|

25 7
|
5天前
|

R和Python机器学习:广义线性回归glm，样条glm，梯度增强，随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm，样条glm，梯度增强，随机森林和深度学习模型分析
|
10天前
|

【4月更文挑战第10天】本文介绍了如何使用Python和Vue.js构建机器学习模型预测界面。Python作为机器学习的首选语言，结合Vue.js的前端框架，能有效部署模型并提供直观的预测服务。步骤包括：1) 使用Python训练模型并保存；2) 创建Python后端应用提供API接口；3) 利用Vue CLI构建前端项目；4) 设计Vue组件实现用户界面；5) 前后端交互通过HTTP请求；6) 优化用户体验；7) 全面测试并部署。这种技术组合为机器学习模型的实用化提供了高效解决方案，未来有望更加智能和个性化。
17 1
|
12天前
|

【4月更文挑战第9天】本文介绍了使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先，简述了机器学习的基本概念和类型。接着，展示了如何安装Python和Scikit-learn，加载与处理数据，选择模型进行训练，以及评估模型性能。通过本文，读者可了解机器学习入门步骤，并借助Python和Scikit-learn开始实践。
10 0
|
13天前
|

【python毕业设计】python基于Pygame的吃金币游戏设计与实现（源码+毕业论文）【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现（源码+毕业论文）【独一无二】
23 2
|
13天前
|

【python】python汽车效能数据集—回归建模（源码+数据集）【独一无二】
【python】python汽车效能数据集—回归建模（源码+数据集）【独一无二】
15 0
|
13天前
|

【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
18 0
|
13天前
|

【python】Python大豆特征数据分析 [机器学习版一]（代码+论文）【独一无二】
【python】Python大豆特征数据分析 [机器学习版一]（代码+论文）【独一无二】
33 1