ngc1300
ngc1300

Reputation: 140

Append for MATLAB

I am training an ANN, and I want to have different instances of training. In each instance, I want to find the maximum difference between the actual and predicted output. Then I want to take the average of all these maximums.

My code so far is:

maximum = []; 
k=1;

for k = 1:5
  %Train network
  layers = [ ...
    imageInputLayer([250 1 1])
    reluLayer
    fullyConnectedLayer(100)
    fullyConnectedLayer(100)
    fullyConnectedLayer(1)
    regressionLayer];

  options = trainingOptions('sgdm','InitialLearnRate',0.1, ...
    'MaxEpochs',1000);
  net = trainNetwork(nnntrain,nnnfluidtrain,layers,options);
  net.Layers

  %Test network
  predictedn = predict(net,nnntest);
  maximum = append(maximum, max(abs(predictedn-nnnfluidtest)));

  k=k+1
end

My intent is to produce a list named 'maximum' with five elements (the max of each ANN training instance) that I would then like to take the average of.

However, it keeps giving me the error:

wrong number of input arguments for obsolete matrix-based syntax

when it tries to append. The first input is a list while the second is a 1x1 single.

Upvotes: 2

Views: 2608

Answers (1)

rayryeng
rayryeng

Reputation: 104474

Appending in MATLAB is a native operation. You append elements by actually building a new vector where the original vector is part of the input.

Therefore:

maximum = [maximum max(abs(predictedn-nnnfluidtest))];

If for some reason you would like to do it in function form, the function you are looking for is cat which is short form for concatenate. The append function is seen in multiple toolboxes but each one of them does not do what you want. cat is what you want but you still need to provide the original input vector as part of the arguments:

maximum = cat(2, maximum, max(abs(predictedn-nnnfluidtest)));

The first argument is the axis you want to append to. To respect the code that you're doing above, you want the columns to increase as you extend your vector so that is the second axis, or the axis being 2.

Upvotes: 2

Related Questions