Help solving error "Undefined function or variable 'objFcn'. with Bayesian Optimization Transfer Learning. How do I fix?
    8 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I am trying to follow the example for Deep Learning Using Bayesian Optimization (https://www.mathworks.com/help/deeplearning/examples/deep-learning-using-bayesian-optimization.html), but with transfer learning instead. I keep running into the error:
"Undefined function or variable 'objFcn'.
Error in test_BayesianOptimization (line 38)
BayesObj = bayesopt(objFcn,optimVars,..."
I am using imageDataStores instead of 4-D uint8 arrays and categorical arrays to store the images and I think this might be part of the problem but I'm not sure how to go about fixing it.
Some of the code I think is relevant to my problem is as follows:
%load data
imds = imageDatastore('D:\Wavelets\Transfer Learning\Images', ...
    'IncludeSubfolders', true, ...
    'FileExtensions', '.jpg', ...
    'LabelSource', 'foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.8,'randomize');
%Create the object function for the Bayesian optimizer.
%defined at bottom of script.
ObjFcn = makeObjFcn(imdsTrain,imdsValidation);
%this is where line 38 is that I keep getting the error
BayesObj = bayesopt(objFcn,optimVars,...
    'MaxTime',1.5*60*60,...
    'IsObjectDeterministic',false,...
    'UseParallel',false);
%-------------------------ObjectiveFunction-------------------
function ObjFcn = makeObjFcn(imdsTrain,imdsValidation)
ObjFcn = @valErrorFun;
    function [valError,cons,fileName] = valErrorFun(optVars)
        %load the pretrained network
        net = alexnet;
        %analyzeNetwork(net);
        %******************define network architecture********************
        inputSize = net.Layers(1).InputSize;
        %replace final layers of network for new training classifications
        layersTransfer = net.Layers(1:end-3);
        numClasses = numel(categories(imdsTrain.Labels));
        layers = [
            layersTransfer
            fullyConnectedLayer(numClasses,...
            'WeightLearnRateFactor',10,...
            'BiasLearnRateFactor',10)
            softmaxLayer
            classificationLayer];
        %---------------------Resize Images--------------------------
        augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
        augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
        %-------------------set up training options------------------
        miniBatchSize = optVars.miniBatchSize;
        validationFreq = floor(numel(imdsTrain)/miniBatchSize);
        options = trainingOptions('sgdm',...
            'MiniBatchSize',miniBatchSize,...
            'MaxEpochs',optVars.MaxEpochs,...
            'Shuffle','every-epoch',...
            'ValidationData',augimdsValidation,...
            'ValidationFrequency',valFreq,...
            'InitialLearnRate',optVars.InitialLearnRate, ...
            'L2Regularization',optVars.L2Regularization, ...
            'Momentum',optVars.Momentum, ...
            'Verbose',false,...
            'Plots','training-progress');
        %train network
        netTransfer = trainNetwork(augimdsTrain,layers,options);
        %Evaluate training
        YPredict = classify(netTransfer,augimdsValidation);
        valError = 1 - mean(YPredict == imdsValidation.Labels);
        fileName = num2str(valError) + ".mat";
        save(fileName,'netTransfer','valError','options')
        cons = [];
    end
end
0 Commenti
Risposta accettata
  Don Mathis
    
 il 3 Lug 2019
        It looks like you named your variable ObjFcn but then passed it as objFcn.
ObjFcn = makeObjFcn(imdsTrain,imdsValidation);
BayesObj = bayesopt(objFcn,optimVars,...
0 Commenti
Più risposte (3)
Vedere anche
Categorie
				Scopri di più su Deep Learning Toolbox in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




