無名関数の原理

조회 수: 8 (최근 30일)
yuya suzuki
yuya suzuki 2020년 12월 16일
답변: Tohru Kikawada 2021년 2월 2일
初心者です。
以下のコードについて、無名関数の仕組みで理解できない部分があります。
無名関数の(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

답변 (1개)

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

카테고리

Help CenterFile Exchange에서 Statistics and Machine Learning Toolbox 入門에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!