深度学习基础知识3-BP神经网络
概述
反向传播神经网络(Backpropagation Neural Network,BP神经网络)是一种用于机器学习的前馈神经网络,也是一种监督学习算法。它由三层神经元组成:输入层、隐藏层和输出层。BP神经网络通过不断地调整权重来学习输入与输出之间的映射关系。
下面是BP神经网络的基本原理:
-
前馈传播(Forward Propagation): 在前馈传播过程中,输入信号通过输入层传递到隐藏层,然后从隐藏层传递到输出层。每个神经元都有一个权重,输入信号和权重的乘积经过激活函数得到神经元的输出。
-
损失函数(Loss Function): 用于衡量模型输出与真实输出之间的差距。常见的损失函数包括均方误差(Mean Squared Error,MSE)等。
-
反向传播(Backward Propagation): 在反向传播过程中,通过计算损失函数对权重的梯度,然后利用梯度下降法等优化算法来更新权重,以减小损失函数值。
-
梯度下降法(Gradient Descent): 通过不断调整权重,使得损失函数逐渐减小,最终收敛到局部最小值。
-
隐藏层(Hidden Layer): BP神经网络中的隐藏层可以有多层,每一层都有一定数量的神经元。这些隐藏层的存在使得网络能够学习更加复杂的模式和特征。
-
激活函数(Activation Function):
BP神经网络的训练过程就是通过不断地调整权重,使得网络输出尽可能接近真实值的过程。这种网络结构可以适用于各种复杂的模式识别和预测问题。
BP算法
网络结构
BP神经网络实现手写数字识别
#一个用于数值计算的库。
import numpy as np
from sklearn.datasets import load_digits # 用于加载手写数字数据集
from sklearn.preprocessing import LabelBinarizer #用于将类别标签转换为二进制形式,以便于机器学习模型使用。
from sklearn.model_selection import train_test_split #用于将数据划分为训练集和测试集。
from sklearn.metrics import classification_report,confusion_matrix #用于评估分类模型的性能。
import matplotlib.pyplot as plt #用于绘制图像。
# 载入数据
digits = load_digits()
print(digits.images.shape)
#显示图片
plt.imshow(digits.images[0],cmap='gray')
plt.waitforbuttonpress()
plt.imshow(digits.images[1],cmap='gray')
plt.waitforbuttonpress()
plt.imshow(digits.images[2],cmap='gray')
plt.waitforbuttonpress()
#数据
X=digits.data
#标签
y = digits.target
print(X.shape)
print(y.shape)
print(X[:3]