【Matlab智能算法】PSO优化(单隐层)BP神经网络算法

简介: 【Matlab智能算法】PSO优化(单隐层)BP神经网络算法


1.优化思路

BP神经网络的隐藏节点通常由重复的前向传递和反向传播的方式来决定,通过修改或构造训练方式改隐藏的节点数,相应的初始权重和偏置也会随之变化,从而影响网络的收敛和学习效率。为了减少权重和偏置对模型的影响,采用粒子群算法对BP神经网络模型的权重和偏置进行优化,从而加快网络的收敛速度和提高网络的学习效率。

优化的重点在于如何构造关于模型权重和偏置的目标函数。将PSO(粒子群优化算法)的适应度函数设为预测效果和测试输出的误差绝对值,通过BP神经网络训练得到不同权重和偏置对应的适应度,当寻找的权重和偏置使得适应度最小,即误差最小时,则为最优权值和偏置,再将最优值返回用于构建BP神经网络。

2.测试函数

y = x 1 2 + x 2 2 y = x_1^2+x_2^2y=x12+x22

要求:拟合未知模型(预测)。

条件:已知模型的一些输入输出数据。

已知一些输入输出数据(用rand函数生成输入,然后代入表达式生成输出):

for i=1:4000
    input(i,:)=10*rand(1,2)-5;
    output(i)=input(i,1)^2+input(i,2)^2;
end

3.完整代码

data.m

for i=1:4000
    input(i,:)=10*rand(1,2)-5;
    output(i)=input(i,1)^2+input(i,2)^2;
end
output=output';
save data input output

PSO_BP_fun.m

function error = PSO_BP_fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn)
%提取
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
%网络进化参数
net.trainParam.epochs=20;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00001;
net.trainParam.show=100;
net.trainParam.showWindow=0;
%网络权值赋值
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
%网络训练
net=train(net,inputn,outputn);
an=sim(net,inputn);
error=sum(abs(an-outputn));

PSO_BP.m

%% 清空环境
clc
tic
%读取数据
load data input output
%节点个数
inputnum=2;
hiddennum=4;
outputnum=1;
opnum=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;
% 需要优化的参数个数
%% 训练数据预测数据提取及归一化
%从1到4000间随机排序
k=rand(1,4000);
[m,n]=sort(k);
%划分训练数据和预测数据
input_train=input(n(1:3900),:)';
output_train=output(n(1:3900),:)';
input_test=input(n(3901:4000),:)';
output_test=output(n(3901:4000),:)';
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%构建网络
net=newff(inputn,outputn,hiddennum);
% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=100;   % 进化次数  
sizepop=30;   %种群规模
%个体和速度最大最小值
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
for i=1:sizepop
    pop(i,:)=5*rands(1,opnum);
    V(i,:)=rands(1,opnum);
    fitness(i)=PSO_BP_fun(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:);   %全局最佳
gbest=pop;    %个体最佳
fitnessgbest=fitness;   %个体最佳适应度值
fitnesszbest=bestfitness;   %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
    i;
    for j=1:sizepop
        %速度更新
        V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        V(j,find(V(j,:)>Vmax))=Vmax;
        V(j,find(V(j,:)<Vmin))=Vmin;
        %种群更新
        pop(j,:)=pop(j,:)+0.2*V(j,:);
        pop(j,find(pop(j,:)>popmax))=popmax;
        pop(j,find(pop(j,:)<popmin))=popmin;
        %自适应变异
        pos=unidrnd(opnum);
        if rand>0.95
            pop(j,pos)=5*rands(1,1);
        end
        %适应度值
        fitness(j)=PSO_BP_fun(pop(j,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
    end
    for j=1:sizepop
    %个体最优更新
    if fitness(j) < fitnessgbest(j)
        gbest(j,:) = pop(j,:);
        fitnessgbest(j) = fitness(j);
    end
    %群体最优更新 
    if fitness(j) < fitnesszbest
        zbest = pop(j,:);
        fitnesszbest = fitness(j);
    end
    end
    yy(i)=fitnesszbest;    
end
%% PSO结果分析
plot(yy)
title(['适应度曲线  ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');ylabel('适应度');
x=zbest;
%% 把最优初始阈值权值赋予网络预测
% %用PSO优化的BP网络进行值预测
w1=x(1:inputnum*hiddennum);
B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);
w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);
B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
%% PSO-BP网络训练
%网络进化参数
net.trainParam.epochs=120;
net.trainParam.lr=0.005;
net.trainParam.goal=4e-8;
%网络训练
[net,per2]=train(net,inputn,outputn);
%% PSO-BP网络预测
%数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
inputn_train=mapminmax('apply',input_train,inputps);
an=sim(net,inputn_test);
an1=sim(net,inputn_train);
test_PSOBP=mapminmax('reverse',an,outputps);
train_PSOBP=mapminmax('reverse',an1,outputps);
%% PSO-BP误差
error_PSOBP=test_PSOBP-output_test;
disp('PSO-BP results:');
errorsum_PSOBP=sum(abs(error_PSOBP))
figure(1);
plot(test_PSOBP,':og');
hold on
plot(output_test,'-*');
legend('Predictive output','Expected output','fontsize',10.8);
title('PSO-BP network output','fontsize',12);
xlabel("samples",'fontsize',12);
figure(2);
plot(error_PSOBP,'-*');
title('PSO-BP Neural network prediction error');
xlabel("samples",'fontsize',12);
figure(3);
plot(100*(output_test-test_PSOBP)./output_test,'-*');
title('PSO-BP Neural network prediction error percentage (%)');
xlabel("samples",'fontsize',12);
figure(4);
plot(100*(output_train-train_PSOBP)./output_train,'-*');
title('PSO-BP Neural network training error percentage (%)');
xlabel("samples",'fontsize',12);
toc

4.运行效果

hiddennum = 4:

输出:

PSO-BP results:
errorsum_PSOBP =
    1.2443
历时 109.578562 秒。

hiddennum = 5:

输出:

PSO-BP results:
errorsum_PSOBP =
    0.3804
历时 303.508080 秒。

资源下载

下载链接

相关文章
|
机器学习/深度学习 算法
单隐层神经网络在Matlab上实现及其简单应用
单隐层神经网络在Matlab上实现及其简单应用
|
7天前
|
存储 安全 算法
网络安全与信息安全:漏洞、加密技术及安全意识的重要性
如今的网络环境中,网络安全威胁日益严峻,面对此类问题,除了提升相关硬件的安全性、树立法律法规及行业准则,增强网民的网络安全意识的重要性也逐渐凸显。本文梳理了2000年以来有关网络安全意识的研究,综述范围为中国知网中篇名为“网络安全意识”的期刊、硕博论文、会议论文、报纸。网络安全意识的内涵是在“网络安全”“网络安全风险”等相关概念的发展中逐渐明确并丰富起来的,但到目前为止并未出现清晰的概念界定。此领域内的实证研究主要针对网络安全意识现状与问题,其研究对象主要是青少年。网络安全意识教育方面,很多学者总结了国外的成熟经验,但在具体运用上仍缺乏考虑我国的实际状况。 内容目录: 1 网络安全意识的相关
|
1天前
|
SQL 安全 算法
网络安全与信息安全:漏洞、加密与意识的交织
【10月更文挑战第35天】在数字化时代,网络安全不再是可选项,而是每个网民的必修课。本文旨在深入探讨网络安全的核心要素,包括常见的安全漏洞、先进的加密技术以及不可或缺的安全意识。通过分析这些方面,我们将揭示如何保护个人和组织免受网络攻击的策略,同时提供实用的代码示例,以增强读者的实践能力。文章将引导您思考如何在日益复杂的网络环境中保持警惕,并采取积极措施以确保数据的安全。
13 4
|
1天前
|
SQL 安全 网络安全
网络安全与信息安全:漏洞、加密与安全意识的交织
在数字化时代,网络安全和信息安全的重要性日益凸显。本文深入探讨了网络安全漏洞、加密技术以及安全意识等关键要素,分析了它们之间的相互作用和对维护网络安全的影响。通过实例和代码示例,揭示了网络攻击的常见手段,展示了如何利用加密技术保护数据,以及提升个人和组织的安全意识。本文旨在为读者提供有价值的信息和建议,帮助在复杂的网络环境中更好地保护自己的数字资产。
|
3天前
|
监控 安全 网络安全
企业网络安全:构建高效的信息安全管理体系
企业网络安全:构建高效的信息安全管理体系
22 5
|
1天前
|
安全 网络协议 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第35天】在数字化时代,网络安全和信息安全已成为全球关注的焦点。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供实用的建议和策略,以帮助个人和企业提高网络安全防护能力。通过了解网络安全的基本原理和最佳实践,我们可以更好地保护自己免受网络威胁的侵害。
|
3天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全挑战与解决方案
【10月更文挑战第33天】在数字化时代的浪潮中,云计算以其灵活性、可扩展性和成本效益成为企业数字化转型的核心动力。然而,随之而来的网络安全问题也日益突出,成为制约云计算发展的关键因素。本文将深入探讨云计算环境中的网络安全挑战,分析云服务的脆弱性,并提出相应的信息安全策略和最佳实践。通过案例分析和代码示例,我们将展示如何在云计算架构中实现数据保护、访问控制和威胁检测,以确保企业在享受云计算带来的便利的同时,也能够维护其信息系统的安全和完整。
|
2天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的深度剖析
【10月更文挑战第34天】本文将深入探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将通过实例和代码示例,解析云计算如何改变网络安全的格局,以及如何在云计算环境下保护信息安全。我们将从云计算的基本概念开始,然后深入到网络安全和信息安全的主题,最后通过代码示例来展示如何在云计算环境下实现网络安全和信息安全。
|
5天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第31天】本文将探讨网络安全和信息安全的重要性,以及如何通过理解和应用相关的技术和策略来保护我们的信息。我们将讨论网络安全漏洞、加密技术以及如何提高安全意识等主题。无论你是IT专业人士,还是对网络安全感兴趣的普通用户,都可以从中获得有用的信息和建议。
17 1
|
5天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第31天】随着互联网的普及,网络安全问题日益突出。本文将探讨网络安全漏洞、加密技术和安全意识等方面的内容,帮助读者了解网络安全的重要性,提高自身的网络安全防护能力。
下一篇
无影云桌面