I am am trying to use the neural network toolbox to predict an internal temperature given a number of input conditions. I have used an automatically generated code for a NARX network and made some small changes. I am aware that the typical workflow is to train open and then change to closed, however I would like to compare the results from this approach with training the network initially in closed form.
Error using network/subsasgn>network_subsasgn (line 91) Index exceeds matrix dimensions. Error in network/subsasgn (line 13) net = network_subsasgn(net,subscripts,v,netname); Error in narx_closed (line 28) net.inputs{2}.processFcns = {'removeconstantrows','mapminmax'};
%%Closed Loop NARX Neural Network %%Load data and create input and output matrices load('junior_class_data.mat'); U = [Outdoor_Temp, Position, Wind_Speed, Wind_Direction]; Y = [Zone_Temp]; inputSeries = tonndata(U,false,false); targetSeries = tonndata(Y,false,false); %%Create a Nonlinear Autoregressive Network with External Input inputDelays = 0:2; feedbackDelays = 1:2; hiddenLayerSize = 10; net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'closed'); %%Pre-Processing % 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. [inputs,inputStates,layerStates,targets] = preparets(net,inputSeries,{},targetSeries); % Setup Division of Data for Training, Validation, Testing % For a list of all data division functions type: help nndivide net.divideFcn = 'divideblock'; % The property DIVIDEMODE set to TIMESTEP means that targets are divided % into training, validation and test sets according to timesteps. % For a list of data division modes type: help nntype_data_division_mode net.divideMode = 'value'; % Divide up every value net.divideParam.trainRatio = 80/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 5/100; %%Training Function % For a list of all training functions type: help nntrain % Customize training parameters at: net.trainParam net.trainFcn = 'trainlm'; % Levenberg-Marquardt % Choose a Performance Function % For a list of all performance functions type: help nnperformance % Customize performance parameters at: net.performParam net.performFcn = 'mse'; % Mean squared error % Choose Plot Functions % For a list of all plot functions type: help nnplot % Customize plot parameters at: net.plotParam net.plotFcns = {'plotperform','plottrainstate','plotresponse', ... 'ploterrcorr', 'plotinerrcorr'}; %%Train the Network [net,tr] = train(net,inputs,targets,inputStates,layerStates); %%Test the Network outputs = net(inputs,inputStates,layerStates); errors = gsubtract(targets,outputs); performance = perform(net,targets,outputs) % Recalculate Training, Validation and Test Performance trainTargets = gmultiply(targets,tr.trainMask); valTargets = gmultiply(targets,tr.valMask); testTargets = gmultiply(targets,tr.testMask); trainPerformance = perform(net,trainTargets,outputs) valPerformance = perform(net,valTargets,outputs) testPerformance = perform(net,testTargets,outputs) %%View the Network view(net)
ANSWER
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
close all, clear all, clc
disp('DIRECT TRAINING OF A CLOSELOOP NARXNET')
load('maglev_dataset');
whos
% Name Size Bytes Class
% maglevInputs 1x4001 272068 cell
% maglevTargets 1x4001 272068 cell
X = maglevInputs;
T = maglevTargets;
ID = 1:2, FD = 1:2, H = 10 % Default values
netc = closeloop(narxnet(ID,FD,H));
view(netc)
netc.divideFcn = 'divideblock';
[ Xcs, Xci, Aci, Tcs ] = preparets( netc, X, {}, T );
tcs = cell2mat(Tcs);
whos X T Xcs Xci Aci Tcs tcs
% Name Size Bytes Class
% Aci 2x2 416 cell
% T 1x4001 272068 cell
% Tcs 1x3999 271932 cell
% X 1x4001 272068 cell
% Xci 1x2 136 cell
% Xcs 1x3999 271932 cell
% tcs 1x3999 31992 double
MSE00cs = var(tcs,1) % 2.0021 ( 1-dim MSE reference)
rng(4151941)
tic
[netc trc Ycs Ecs Xcf Acf ] = train(netc,Xcs,Tcs,Xci,Aci);
toc % 197 sec
view(netc)
whos Ycs Ecs Xcf Acf
% Name Size Bytes Class
% Acf 2x2 416 cell
% Ecs 1x3999 271932 cell
% Xcf 1x2 136 cell
% Ycs 1x3999 271932 cell
stopcriterion = trc.stop % Validation stop
bestepoch = trc.best_epoch % 4
ecs = cell2mat(Ecs);
NMSEcs = mse(ecs)/MSE00cs % 1.2843
tcstrn = tcs(trc.trainInd);
tcsval = tcs(trc.valInd);
tcstst = tcs(trc.testInd);
NMSEcstrn = trc.best_perf/var(tcstrn,1) % 1.3495
NMSEcsval = trc.best_vperf/var(tcsval,1) % 0.9325
NMSEcstst = trc.best_tperf/var(tcstst,1) % 1.6109
I consider a good design to have a normalized MSE,
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
close all, clear all, clc disp('DIRECT TRAINING OF A CLOSELOOP NARXNET') load('maglev_dataset'); whos % Name Size Bytes Class % maglevInputs 1x4001 272068 cell % maglevTargets 1x4001 272068 cell X = maglevInputs; T = maglevTargets; ID = 1:2, FD = 1:2, H = 10 % Default values netc = closeloop(narxnet(ID,FD,H)); view(netc) netc.divideFcn = 'divideblock'; [ Xcs, Xci, Aci, Tcs ] = preparets( netc, X, {}, T ); tcs = cell2mat(Tcs); whos X T Xcs Xci Aci Tcs tcs % Name Size Bytes Class % Aci 2x2 416 cell % T 1x4001 272068 cell % Tcs 1x3999 271932 cell % X 1x4001 272068 cell % Xci 1x2 136 cell % Xcs 1x3999 271932 cell % tcs 1x3999 31992 double MSE00cs = var(tcs,1) % 2.0021 ( 1-dim MSE reference) rng(4151941) tic [netc trc Ycs Ecs Xcf Acf ] = train(netc,Xcs,Tcs,Xci,Aci); toc % 197 sec view(netc) whos Ycs Ecs Xcf Acf % Name Size Bytes Class % Acf 2x2 416 cell % Ecs 1x3999 271932 cell % Xcf 1x2 136 cell % Ycs 1x3999 271932 cell stopcriterion = trc.stop % Validation stop bestepoch = trc.best_epoch % 4 ecs = cell2mat(Ecs); NMSEcs = mse(ecs)/MSE00cs % 1.2843 tcstrn = tcs(trc.trainInd); tcsval = tcs(trc.valInd); tcstst = tcs(trc.testInd); NMSEcstrn = trc.best_perf/var(tcstrn,1) % 1.3495 NMSEcsval = trc.best_vperf/var(tcsval,1) % 0.9325 NMSEcstst = trc.best_tperf/var(tcstst,1) % 1.6109
SEE COMPLETE ANSWER CLICK THE LINK
Comments
Post a Comment