clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
%Echo State Network (ESN)
%% Parameters
actFunc = @ActFuncs.Tanh;
alpha=1; % leaking rate
betta=1e-8; % regularization coefficient
regInput=0.01; % regularization for W_in
regHidden=0.98; % regularization for K
Sparse=0.3; % percentage of zero weights of K
% Network structure
inputSize = 1;
hiddenSize = 500;
outputSize = 1000;
samplesSize=10000;
trialsSize=samplesSize-outputSize;
%% Build the ESN
%input layer
X= rand(1,samplesSize);
W_in= rand(hiddenSize,inputSize)*regInput;
%reservoir layer
K= randn(hiddenSize) .* randi([0,1],hiddenSize);
rhow= max(real(eig(K))); % biggest eigenvalue
K= (K./rhow)* regHidden; % update K
r= zeros(hiddenSize,1); % reservoir state
% Matrice for each time step, saves the reservoier state (with bias & input neurons)
r_mat=zeros(trialsSize,hiddenSize+2);
% output layer
Y0=zeros(outputSize,trialsSize); % teachers for predictions
rSquare_train=zeros(outputSize,1);
rSquare_test=zeros(outputSize,1);
%% Learning Process of the ESN
% feed forward
for i = 1:length(X)
r = (1-alpha)*r + alpha*Tanh(W_in*X(i)+K*r); % Dynamic equation of recurrent network
if i > outputSize
currInd=i-outputSize;
Y0(:,currInd)=X(currInd:i-1)'; % update Y0
r_mat(currInd,:) = [r;X(i);1]; % update reservoir state + input and bias
end
end
% learning of W_out using linear regression
C = (1/trialsSize) * (r_mat)' * (r_mat);
u = (1/trialsSize)*Y0*r_mat;
% ridge regression
W_out = (C + betta * eye(size(C, 1))) \ u';
Y = (r_mat*W_out)'; % output of reservoir (Prediction)
%% Computational part
% R square Score per neuron
for neuron = 1 : outputSize
rSquare_train(neuron) = corr(Y(neuron, :)', Y0(neuron, :)') .^ 2;
end
memoryCapacity=sum(rSquare_train);
disp(['Training Memory Capacity is : ' num2str(memoryCapacity)])
%% ESN Testing
X_test = randn(1,samplesSize);
Y0_test = zeros(outputSize,trialsSize);
r_mat_test = zeros(trialsSize,hiddenSize+2);
% feed forword
for i = 1:length(X)
r = (1-alpha)*r + alpha*Tanh(W_in*X(i)+K*r);
if i > outputSize
currInd=i-outputSize;
Y0_test(:,currInd)=X(currInd:i-1)'; % update Y0
r_mat_test(currInd,:) = [r;X(i);1]; % update reservoir state + input and bias
end
end
Y_test = (r_mat_test*W_out)';
% R square Score per neuron
for neuron = 1 : outputSize
rSquare_test(neuron) = corr(Y_test(neuron, :)', Y0_test(neuron, :)') .^ 2;
end
memoryCapacity_test=sum(rSquare_test);
disp(['Test Memory Capacity is : ' num2str(memoryCapacity_test)])
%% Plot Result
plotResult(outputSize, rSquare_train,rSquare_test);
matlab-基于MATLAB的ESN网络训练测试仿真-源码
版权申诉
5星 · 超过95%的资源 190 浏览量
2021-09-29
01:25:09
上传
评论
收藏 3KB RAR 举报
mYlEaVeiSmVp
- 粉丝: 1965
- 资源: 19万+
最新资源
- 网络爬虫软件研究与开发pdf
- Java项目-基于SSM+JSP的母婴用品网站的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- 基于微信小程序的购物商城app设计带Java后端+源代码+文档说明+数据库.zip
- 基于51单片机外设应用设计.DSN后缀PROTEUS仿真仿真源文件及C语言实例源码例程合集(300个).zip
- “Bunnies and Badgers”兔子和獾和是一个基于pygame库开发的射击游戏
- 华为打印机,华为打印机资料
- Java项目-基于SSM+JSP的医院门诊挂号系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- mac os button功能demo
- 如何在Ubuntu上安装软件?
- 华为HCIA-WLAN 3.0 课程视频(20 熟悉命令行.mp4)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈