一.概念及应用
多层感知机(Multi Layer Perceptron, MLP)是由多个感知机层全连接组成的前馈神经网络,BP网络是指连接权调整采用了反向传播(Back Propagation)学习算法的前馈网络,可实现从输入到输出的非线性映射。
BP网络由前向传播与反向传播两个过程组成,前向传播是指由输入值预测输出值的过程,反向传播是指各输出层反向计算对损失函数的梯度进而迭代权重的过程。
BP网络可用于分类和回归问题,在回归问题中损失函数选取rmse等,在分类问题中损失函数选取交叉熵等,在输出层二分类问题选择sigmoid函数层进行映射,多分类问题选择softmax函数层进行映射。
二.python实现
导入所需库
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
数据准备与切分
X, ytrue = make_classification(n_samples=100, random_state=1)
X=np.hstack((X,np.ones([X.shape[0], 1])))#增加一列bias
X_train, X_test, y_train, y_test = train_test_split(X, ytrue,
random_state=1)
前期准备函数
def sigmoid(z):
return 1 / (1.0 + np.exp(-np.clip(z,-100,10000)))
def sigmoid_Derivative(h):
return h*(1.0-h)#对应位置元素进行相乘,计算y的方差h(1-h)
BP类实现
整体思路:分别定义各层系数矩阵,向前传播计算输出值a,输入作为输出进行迭代;向后传播迭代参数
'''{param:
ni:input数据维数
nl:隐藏层数量(3)
nh:每层隐藏层包含神经元数量(列表形式存储)[2,3,4]
no:输出类别数}
'''