2016-09-20 15 views
0

内蔵の関数を使用せずに0から9までの数字を認識して10倍のクロスバリデーションを実行しようとしました。私は500ピクチャのサンプルを持っています(訓練とテストの各桁は50です)。MATLAB: 10 fold cross Validation without using existing functionsそれ以外のウェブサイトはそれほど役に立ちませんでした。私がMATLABを初めて使ったので、私はそれを微調整するために何をすべきかについてよく分かりません。 これはこれまでのコードです。MATLABで組み込み関数を使用せずに10倍のクロスバリデーションを行う方法は?

c=zeros(10,size(x,2),size(x,3)); 
    K=10; 
    k=10; 
    test= 1:50/K; 
    for fold =1:K 
     if(test(1)~=1) 
      train = x(1:test(1)-1,:,:); 
      if (test(5) ~=50) 
       train=[train ; x(test(end):50,:,:)]; 
      end 
     else 
      train = x(test(1):50,:,:); 

     end 
     test = test+ones(1,50/K)*50/K; 
     end 
    for i =0:9 

      test=test+50/K*ones(1,5); 
      c(i+1,:,:)=cal_likelihood(x(1+i*50:50+i*50,:,:),50/k*(k-1)); 
    end 

変数説明

  • xが、それはすべての500桁の絵を保つダブル500x28x28です。
  • テストはテストセットです。
  • trainはトレーニングセットです。電車を45
  • 第二倍に:1::テストのための5、6 10倍を行うために

は私が

  1. 第一倍のようなトレーニングセットを変更する必要がある検証を横断6時10分テストのために、1:5 11:50列車など

問題は、トレーニングセットを6:45から1:5および11のように別のセットにシフトする方法がわかりません:50。またはこれより良いループを書くことはできますか?

PSS。これに答える人が気にしないのであれば、500x28x28倍は実際に何を意味しますか?

+0

「500x28x28 double」は、[多次元配列](実際には3次元配列)であることを意味します。ディメンション '500'は例(あなたのケースの数字ピクチャ)の数を表し、28x28は各ピクチャの長さと幅を表します(各ピクチャは28x28のマトリックスで表されます)。 – uyaseen

+0

@ uyaseenありがとうございます。 – RHLS

答えて

0

これを書く方法はいくつかありますが、その中には他のものよりも理解しやすいものがあります。 1:3のような式は[1,2,3]と評価され、式1:0は空のセットと評価されます。ですから、if文を使わなくてもセットを生成するのは非常に簡単です。あなたがtest_indtrain_indはあなたが必要なトレーニングと検証のブロックのサブセットに対応していることを確認することができます

samples_per_digit=50; 
block_sze=samples_per_digit/K; 
for fold =1:K 
    test_ind = 1+(fold-1)*block_sze:fold*block_sze; 
    train_ind = [1:(fold-1)*block_sze, (fold*block_sze+1):samples_per_digit]; 

    for i=0:9 
     train=x(train_ind+i*samples_per_digit,:,:); 
     test=x(test_ind+i*samples_per_digit,:,:); 
     % Perform training and validation in here for this fold of the digit i 

:として

私はループを始めると思います。最も内側のループでのみ、数字画像に対応する行列に変換され、iという値を使用してオフセットを計算します。もちろん、必要に応じて、ループの順序を入れ替えて、すべての折り返しを1桁で計算することができます。それは結果をどのように保存するかによって異なります。

+0

ちょうどそれを試してみて、それは非常にうまく動作します。私が使用するコードよりもはるかに優れています。ところで、私のコードはインストラクターが授業で私に与えてくれるものですが、私はこのクラスが好きだと思うのですが、とても短くてシンプルで理解しやすいです。 – RHLS

関連する問題