交差検定(cross​-validatio​n)につきまして

5 Ansichten (letzte 30 Tage)
ssk
ssk am 28 Feb. 2019
Kommentiert: Kenta am 24 Jan. 2020
プログラミング初心者です。
以下のディレクトリ構造に基づき、cross-validationのコードを自力で書きたいと思っていますが、
数週間考えてもどのように分割していいか分からず質問いたします。
どうぞよろしくお願いいたします。
main
-- a
-- image
 -- b
  -- image
 -- c
  -- image
-- d
  -- image
%path = current directory
currentdirectory = pwd;
categories = {'a', 'b', 'c','d'};
%Create an ImageDatastore to help you manage the data.
imds = imageDatastore(fullfile(currentdirectory, categories),'IncludeSubfolders',true,'FileExtensions','.dcm','LabelSource', 'foldernames','ReadFcn');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomize');
下記コード以降に交差検定を導入するコードを導入するかと思うのですが、現状アイディアが思い浮かびません。

Akzeptierte Antwort

Kenta
Kenta am 1 Mär. 2019
Bearbeitet: Kenta am 1 Mär. 2019
[imds01,imds02,imds03,imds04,imds05,imds06,imds07,imds08,imds09,imds010]...
= splitEachLabel(imds,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,'randomize');
imdsTrain1 = imageDatastore(cat(1,imds01.Files,imds02.Files,imds03.Files,imds04.Files,imds05.Files,imds06.Files,imds07.Files,imds08.Files,imds09.Files));
imdsTrain1.Labels = cat(1,imds01.Labels,imds02.Labels,imds03.Labels,imds04.Labels,imds05.Labels,imds06.Labels,imds07.Labels,imds08.Labels,imds09.Labels);
交差検証であれば、crossvalの関数で、任意の分割数で交差検証ができます。その際、実行するコードをfunction化して、
入れ子にすればよいです。
ただ、上のように、かなり無理やりではありますが、全画像を10個に分けたほうがわかりやすいかもしれません。添付のファイルを実行してみてください。
imdsとして、全画像を読み込む
spritEachLabelで10個に分ける
imdsTrain〇として、10個分に分ける
以下for文
for i=1:10
imdsTrain〇(〇にはiの値)で訓練データ
imdsValidation〇(〇には10-iの値、はじめにimdsTrain〇には、imds0〇だけ除外するようにしておく)
通常の流れにそって、imdsTrainで訓練し、imdsValidationでテストする
end
この手書き文字の判別を10点交差検証で行っています。時間がかかるので、maxepochsを1にしています。4にすれば、精度があがるはずです。
  10 Kommentare
ssk
ssk am 16 Apr. 2019
itakura様、度々のご連絡大変失礼いたします。
eval関数につきまして、eval(['trainimds' ,'=', stname,';'])となっておりますが、ここでなぜ '='としているのかご教示いただけますでしょうか。 trainimdsをtrainimds1.....trainimds10と出力するのに'='は必ず必要ないと考えましたのですが。。
Kenta
Kenta am 24 Jan. 2020
trainimds=stname;
とすることを意図しています。ただ、evalはいらないような気もします。
今回はtrainimdsという名前の変数にtrainimds1, ...を与えるので=が必要です。
b=10という変数があって、a=b;とするのと同様です。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB 入門 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!