% Solve an Autoregression Problem with External Input with a NARX Neural Network % Script generated by Neural Time Series app % Created 16-Jul-2015 12:18:44 % % This script assumes these variables are defined: % % inputs - input time series. % targets - feedback time series. X = tonndata(inputs,true,false); T = tonndata(targets,true,false); % Choose a Training Function % For a list of all training functions type: help nntrain % 'trainlm' is usually fastest. % 'trainbr' takes longer but may be better for challenging problems. % 'trainscg' uses less memory. Suitable in low memory situations. trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation. % Create a Nonlinear Autoregressive Network with External Input inputDelays = 1:1; feedbackDelays = 1:1; hiddenLayerSize = 8; net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn); % Choose Input and Feedback Pre/Post-Processing Functions % Settings for feedback input are automatically applied to feedback output % For a list of all processing functions type: help nnprocess % Customize input parameters at: net.inputs{i}.processParam % Customize output parameters at: net.outputs{i}.processParam net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; net.inputs{2}.processFcns = {'removeconstantrows','mapminmax'}; % Prepare the Data for Training and Simulation % The function PREPARETS prepares timeseries data for a particular network, % shifting time by the minimum amount to fill input states and layer % states. Using PREPARETS allows you to keep your original time series data % unchanged, while easily customizing it for networks with differing % numbers of delays, with open loop or closed loop feedback modes. [x,xi,ai,t] = preparets(net,X,{},T); % Setup Division of Data for Training, Validation, Testing % For a list of all data division functions type: help nndivide net.divideFcn = 'divideblock'; net.divideMode = 'time'; % Divide up every sample net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; % Choose a Performance Function % For a list of all performance functions type: help nnperformance net.performFcn = 'mse'; % Mean Squared Error % Choose Plot Functions % For a list of all plot functions type: help nnplot net.plotFcns = {'plotperform','plottrainstate', 'ploterrhist', ... 'plotregression', 'plotresponse', 'ploterrcorr', 'plotinerrcorr'}; % Train the Network [net,tr] = train(net,x,t,xi,ai); % Test the Network y = net(x,xi,ai); e = gsubtract(t,y); performance = perform(net,t,y) % Recalculate Training, Validation and Test Performance trainTargets = gmultiply(t,tr.trainMask); valTargets = gmultiply(t,tr.valMask); testTargets = gmultiply(t,tr.testMask); trainPerformance = perform(net,trainTargets,y) valPerformance = perform(net,valTargets,y) testPerformance = perform(net,testTargets,y) % View the Network %view(net)
[v1,v2,v3], [v2,v3,v4],[v3,v4,v5],...
and
v4,v5,v6,...
respectively.
Because of how I set up my network, I expected my x and t variables to look like
[inputs at time t]| [v2,v3,v4], [v3,v4,v5], ... target from t-1 | v4 , v5 , ...
and
v5, v6, ...
respectively (which clearly isn't perfect as I already have my target fedback from time t-1 in my input at time t but I know how to fix that) but instead I get something even weirder and this time unexpected:
[v2,v3,v4], [v3,v4,v5], ... v5 , v6 , ...
and
v5, v6, ...
close all, clear all, clc [ X0 T ] = simplenarx_dataset; x0 = cell2mat( X0 ); X = con2seq( [ x0; x0; x0 ] ); x = cell2mat(X); whos % Name Size Bytes Class % T 1x100 12000 cell % X 1x100 13600 cell % X0 1x100 12000 cell % x 3x100 2400 double % x0 1x100 800 double ID = 1, FD = 1, H = 8 neto = narxnet( ID, FD, H ); [ Xo, Xoi, Aoi, To ] = preparets( neto, X, {}, T ); to = cell2mat(To); MSE00o = var(to,1); % 0.10199 net.divideFcn = 'divideblock'; rng(415941) [ neto, tro, Yo, Eo, Xof Aof ] = train( neto, Xo, To, Xoi, Aoi ); % [ Yo Xof Aof ] = neto( Xo, Xoi, Ai); Eo = gsubtract(To,Yo); NMSEo = mse(Eo)/MSE00o % 0.15076 NMSEtrno = tro.best_perf/MSE00o % 0.12489 NMSEvalo = tro.best_vperf/MSE00o % 0.18163 NMSEtsto = tro.best_tperf/MSE00o % 0.23894
% Check: 0.7*0.12489+0.15*(0.18163+0.23894) = 0.15051
Matlabsolutions.com provides guaranteed satisfaction with a
commitment to complete the work within time. Combined with our meticulous work ethics and extensive domain
experience, We are the ideal partner for all your homework/assignment needs. We pledge to provide 24*7 support
to dissolve all your academic doubts. We are composed of 300+ esteemed Matlab and other experts who have been
empanelled after extensive research and quality check.
Matlabsolutions.com provides undivided attention to each Matlab
assignment order with a methodical approach to solution. Our network span is not restricted to US, UK and Australia rather extends to countries like Singapore, Canada and UAE. Our Matlab assignment help services
include Image Processing Assignments, Electrical Engineering Assignments, Matlab homework help, Matlab Research Paper help, Matlab Simulink help. Get your work
done at the best price in industry.