無名関数の原理

17 views (last 30 days)
yuya suzuki
yuya suzuki on 16 Dec 2020
Answered: Tohru Kikawada on 2 Feb 2021
初心者です。
以下のコードについて、無名関数の仕組みで理解できない部分があります。
無名関数の(xtrain,ytrain,xtest,これらの引数がどのタイミングで生成されているのか分かりません。
教えてください。
%% ライブラリの選択
library='MATLAB';
global laps
laps = 0;
%% データセットの読み込み
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
'nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true,'LabelSource','foldernames');
%% ダミーのトレーニングインデックスを生成
X = (1:imds.numpartitions)';
y = imds.Labels;
%% 交差検定にCNNの予測ラベル関数のポインタを渡す
Nanasi=@(xtrain,ytrain,xtest)myCNNPredict(xtrain,ytrain,xtest,imds,library,laps);
mcr = crossval('mcr',X,y,'Predfun',Nanasi)
%% CNNを学習し、予測ラベルを出力する関数
function ypred = myCNNPredict(xtrain,ytrain,xtest,imds,library,laps)
switch library
case 'MATLAB'
% 結果が一意になるように乱数シードをデフォルト値に設定
rng('default');
% ダミーの変数ベクトルを受けてimageDatastoreを学習用とテスト用に分割
imdsTrain = imageDatastore(imds.Files(xtrain));
imdsTrain.Labels = ytrain;
imdsValidation = imageDatastore(imds.Files(xtest));
% レイヤーの設定
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
options = trainingOptions('sgdm', ...
'InitialLearnRate',0.01, ...
'MaxEpochs',4, ...
'Shuffle','every-epoch', ...
'Verbose',false);
net = trainNetwork(imdsTrain,layers,options);
ypred = classify(net,imdsValidation);
case 'HALCON'
%%%HALCON
[RateTable,trainedNet,options]=HalconTestC(laps);
ypred=categorical(RateTable.Var3);
laps=laps+1;
end
end

Answers (1)

Tohru Kikawada
Tohru Kikawada on 2 Feb 2021
3つの引数 xtrain,ytrain,xtest は交差検定の関数として呼び出された際、値が渡されます。
mcr = crossval('mcr',X,y,'Predfun',Nanasi)
無名関数を定義しただけですと実行はされていないことになります。
こちらは通常の function 識別子で関数を定義した際と同様の挙動となります。
ご参考になれば幸いです。

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!