無名関数の原理

8 次查看(过去 30 天)
yuya suzuki
yuya suzuki 2020-12-16
初心者です。
以下のコードについて、無名関数の仕組みで理解できない部分があります。
無名関数の(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 中查找有关 イメージを使用した深層学習 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!