BP神经网络

本文详细介绍了BP神经网络的结构,包括输入层、隐藏层和输出层,以及仿射函数和激活函数的工作原理。通过MATLAB代码展示了BP神经网络的训练和测试过程,用于辛烷值预测。此外,讨论了BP网络的特点,如强大的映射和泛化能力,但学习速度较慢。
摘要由CSDN通过智能技术生成

BP 神经网络结构

BPNN 的构成包含了三种结构:“分别是接收信息的输入层,计算信息的中间层和传出结果的输出层,其中中间层也叫隐含层,包含层数大于等于一。

BP 网络的典型结构如下图所示:
在这里插入图片描述

  • 图中 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn是网络的输入,对应着网络的输出 y 1 , y 2 , . . . , y k y_1,y_2,...,y_k y1,y2,...,yk
  • w i j w_{ij} wij w j k w_{jk} wjk代表相邻层之间的连接系数
  • BP 网络的相邻层之间彼此互连
  • 输入层作为数据的流入口,专门负责接收外界传来的样本数据并原封不动的把数据传传递给隐含层
  • 隐含层接收到数据后,先按一定的规则对数据进行计算,然后送给输出层输
  • 出层对得到的数据做计算后把结果传递到外界

神经元模型

  • 仿射函数

    假设第i层的输入值 x i x_i xi,第i层中第j个神经元的输入等于前面一层所有结点计算结果的加权和, w i j w_{ij} wij表示与i层j个神经元连接的权值,bias表示第i层的偏置(也叫阈值),得到仿射函数如下: a j = ∑ i = 1 i = n w i j x i + b i a s a_j=\sum_{i=1}^{i=n}w_{ij}x_i+bias aj=i=1i=nwijxi+bias

  • 激活函数
    假设j个神经元的激活函数为logistic: f ( x ) = 1 1 + exp ⁡ ( − x ) f(x)=\frac{1}{1+\exp(-x)} f(x)=1+exp(x)1,激活函数输出如下:
    f j = 1 1 + exp ⁡ ( − a j ) = 1 1 + exp ⁡ ( − ∑ i = 1 i = n w i j x i + b i a s ) f_j=\frac{1}{1+\exp(-a_j)}=\frac{1}{1+\exp(-\sum_{i=1}^{i=n}w_{ij}x_i+bias)} fj=1+exp(aj)1=1+exp(i=1i=nwijxi+bias)1

  • 人工神经元:将输入值加权求和再加偏置之后施加激活函数就构成了一个神经元
    在这里插入图片描述

BP算法

  • 数学角度看BP

    BP 网络对数据的处理从数学角度来看实际上是实现数据之间的映射关系,即将n 维的输入数据通过一定的函数关系映射到 k 维的输出向量,并通过算法对自身的连接权值进行迭代计算,直至网络输出 k 维向量逼近目标值。

  • 核心

    BP 网络能实现数据对预定目标的准确映射依赖于其核心的 BP(Back-Propagation)算法,它包含了数据和误差正反向传播的两个过程。

  • 特点:

    • BPNN 具备很好的映射能力以及泛化能力等优点,在分类方面有很大的优势

    • 网络的权值对任何一个输出都有影响,因此,对于每次输入,全局网络中的所有权值都要调整,从而导致学习速度很慢

BP神经网络MATLAB代码

%% I. 清空环境变量      BP神经网络实例
clear all
clc

%% II. 训练集/测试集产生
%%
% 1. 导入数据
load spectra;

%%
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));
% 训练集——50个样本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';
% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);     % 测试集样本个数

%% III. 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1);  % 训练集输入归一化,ps_input保存结构参数
p_test = mapminmax('apply',P_test,ps_input);   % 训练集输出归一化

[t_train, ps_output] = mapminmax(T_train,0,1); % 从测试集输入归一化

%% IV. BP神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newff(p_train,t_train,9);%  9 隐含层神经元的个数

%%
% 2. 设置训练参数,
net.trainParam.epochs = 1000;   % 模型训练步长  
net.trainParam.goal = 1e-3;     % 训练目标
net.trainParam.lr = 0.01;       % 学习率

%%
% 3. 训练网络
net = train(net,p_train,t_train);

%%
% 4. 仿真测试
t_sim = sim(net,p_test);

%%
% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);

%% V. 性能评价
%%
% 1. 相对误差error
error = abs(T_sim - T_test)./T_test;

%%
% 2. 决定系数R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2)); 

%%
% 3. 结果对比
result = [T_test' T_sim' error']

%% VI. 绘图
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真实值','预测值')
xlabel('预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比';['R^2=' num2str(R2)]};
title(string)
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值