matlab newelm,Elman神经网络介绍以及Matlab实现

本文介绍了Elman神经网络的结构、特点和与BP网络的区别,并通过Matlab中的newelm()函数展示了如何实现Elman神经网络,用于数据预测。尽管存在训练速度慢和局部极小点的问题,但Elman网络在处理动态信息和建模能力上优于前馈网络。
摘要由CSDN通过智能技术生成

Elman神经网络介绍以及Matlab实现

发布时间:2018-06-28 19:27,

浏览次数:745

, 标签:

Elman

Matlab

Elman神经网络介绍

1.特点

Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了网络的全局稳定性,它比前馈型神经网络具有更强的计算能力,还可以用来解决快速寻优问题。

2.结构

Elman神经网络是应用较为广泛的一种典型的反馈型神经网络模型。一般分为四层:输入层、隐层、承接层和输出层。其输入层、隐层和输出层的连接类似于前馈网络。输入层的单元仅起到信号传输作用,输出层单元起到加权作用。隐层单元有线性和非线性两类激励函数,通常激励函数取Signmoid非线性函数。而承接层则用来记忆隐层单元前一时刻的输出值,可以认为是一个有一步迟延的延时算子。隐层的输出通过承接层的延迟与存储,自联到隐层的输入,这种自联方式使其对历史数据具有敏感性,内部反馈网络的加入增加了网络本身处理动态信息的能力,从而达到动态建模的目的。其结构图如下图1所示,

其网络的数学表达式为:

其中,y为m维输出节点向量;x为n维中间层节点单元向量;u为r维输入向量;为n维反馈状态向量;为中间层到输出层连接权值;为输入层到中间层连接权值;

为承接层到中间层连接权值;g()为输出神经元的传递函数,是中间层输出的线性组合;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用蜂群算法优化ELman神经网络MATLAB程序: ```matlab % 蜂群算法优化ELman神经网络 % 初始化 clear clc global train_input train_target test_input test_target N I H K load Data.mat % 加载数据 train_input = Data.train_input; train_target = Data.train_target; test_input = Data.test_input; test_target = Data.test_target; N = size(train_input, 2); % 样本数 I = size(train_input, 1); % 输入层节点数 H = 10; % 隐层节点数 K = 1; % 输出层节点数 Foods = 30; % 食物数量 Limit = 100; % 迭代次数 Range = 10; % 搜索范围 SP = 0.6; % 固定搜索概率 SN = 5; % 邻域搜索次数 FoodPosition = zeros(Foods, H * (I + H + K) + K); % 食物位置 FoodSource = zeros(Foods, 1); % 食物源 GlobalMin = realmax; % 全局最优解 GlobalParams = zeros(1, H * (I + H + K) + K); % 全局最优参数 Fitness = zeros(Foods, 1); % 适应度值 Max = zeros(Limit, 1); % 最大适应度值 Mean = zeros(Limit, 1); % 平均适应度值 % 初始化食物位置和适应度值 for i = 1:Foods FoodPosition(i, :) = rand(1, H * (I + H + K) + K) * Range * 2 - Range; [Fitness(i), ~] = BPNN(FoodPosition(i, :)); if Fitness(i) < GlobalMin GlobalMin = Fitness(i); GlobalParams = FoodPosition(i, :); end end % 迭代搜索 for t = 1:Limit % 邻域搜索 for i = 1:Foods for j = 1:SN NewFoodPosition = FoodPosition(i, :) + rand(1, H * (I + H + K) + K) * Range * 2 - Range; [NewFitness, ~] = BPNN(NewFoodPosition); if NewFitness < Fitness(i) FoodPosition(i, :) = NewFoodPosition; Fitness(i) = NewFitness; end if NewFitness < GlobalMin GlobalMin = NewFitness; GlobalParams = NewFoodPosition; end end end % 固定搜索 for i = 1:Foods if rand() < SP NewFoodPosition = GlobalParams + rand(1, H * (I + H + K) + K) * Range * 2 - Range; [NewFitness, ~] = BPNN(NewFoodPosition); if NewFitness < Fitness(i) FoodPosition(i, :) = NewFoodPosition; Fitness(i) = NewFitness; end if NewFitness < GlobalMin GlobalMin = NewFitness; GlobalParams = NewFoodPosition; end end end % 记录最大和平均适应度值 Max(t) = max(Fitness); Mean(t) = mean(Fitness); end % 绘制适应度值变化图 figure(1); plot(Max, 'r-'); hold on; plot(Mean, 'b--'); xlabel('迭代次数'); ylabel('适应度值'); legend('最大适应度值', '平均适应度值'); % 测试 [~, output] = BPNN(GlobalParams, 1); output = round(output); accuracy = sum(output == test_target) / length(test_target); disp(['测试准确率为:', num2str(accuracy)]); % BP神经网络 function [fitness, output] = BPNN(params, test) global train_input train_target test_input test_target N I H K W1 = reshape(params(1:H * I), H, I); B1 = reshape(params(H * I + 1:H * I + H), H, 1); W2 = reshape(params(H * I + H + 1:H * I + H + H * K), K, H); B2 = reshape(params(H * I + H + H * K + 1:end), K, 1); if test == 0 % 训练 net = newelm(train_input, train_target, H, {'tansig', 'purelin'}, 'traingd', 'learngd', 'mse'); net.IW{1,1} = W1; net.b{1} = B1; net.LW{2,1} = W2; net.b{2} = B2; net.trainParam.lr = 0.1; net.trainParam.epochs = 100; net.trainParam.goal = 0.01; net = train(net, train_input, train_target); output = sim(net, train_input); fitness = mse(output - train_target); else % 测试 net = newelm(train_input, train_target, H, {'tansig', 'purelin'}, 'traingd', 'learngd', 'mse'); net.IW{1,1} = W1; net.b{1} = B1; net.LW{2,1} = W2; net.b{2} = B2; output = sim(net, test_input); fitness = mse(output - test_target); end end ``` 代码使用了ELman神经网络,其蜂群算法用于优化神经网络的权重和偏置参数。通过运行程序,可以得到神经网络的最优参数和测试准确率。同时,程序还会输出适应度值变化图,以便分析算法的收敛情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值