fnc = @(x) x.^3;
xTrain = linspace(-1, 1, 80)';
yTrain = fnc(xTrain);
numRand = 20;
xValidation = sort(2.*rand(numRand, 1) - 1);
yValidation = fnc(xValidation);
optimVars = [
optimizableVariable('epochs', [100 10000], 'Type', 'integer')
optimizableVariable('InitialLearnRate', [1e-4 1], 'Transform', 'log')
optimizableVariable('numberOfNeurons', [1 100], 'Type', 'integer')];
ObjFcn = makeObjFcn(xTrain, yTrain, xValidation, yValidation);
BayesObject = bayesopt(ObjFcn, optimVars, ...
'MaxTime', 14*60*60, ...
'IsObjectiveDeterministic', false, ...
'UseParallel', false);
function ObjFcn = makeObjFcn(XTrain, YTrain, XValidation, YValidation)
ObjFcn = @valErrorFun;
function [valError, cons, fileName] = valErrorFun(optVars)
layers = [ ...
featureInputLayer(1, "Name", "myFeatureInputLayer", 'Normalization','rescale-symmetric')
fullyConnectedLayer(optVars.numberOfNeurons, "Name", "myFullyConnectedLayer1")
tanhLayer("Name", "myTanhLayer")
fullyConnectedLayer(1, "Name", "myFullyConnectedLayer2")
regressionLayer("Name", "myRegressionLayer")
];
options = trainingOptions('adam', ...
'MaxEpochs', optVars.epochs, ...
'InitialLearnRate', optVars.InitialLearnRate,...
'Shuffle', 'every-epoch', ...
'MiniBatchSize', 128, ...
'Verbose', false);
[trainedNet, ~] = trainNetwork(XTrain, YTrain, layers, options);
close(findall(groot, 'Tag', 'NNET_CNN_TRAININGPLOT_UIFIGURE'))
YPredicted = predict(trainedNet, XValidation);
valError = norm(YPredicted - YValidation);
fileName = num2str(valError) + ".mat";
save(fileName, 'trainedNet', 'valError', 'options')
cons = [];
end
end