2016-09-20 3 views
0

나는 10 개 주름이 훈련하고 내가 500 사진의 샘플이 0-9에서 숫자를 인식하는 내장 함수를 사용하지 않고 검증을 통과 할 시도 (각 훈련하는 자리 및 테스트를위한 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입니다.
  • 테스트는 테스트 세트입니다.
  • 기차는 훈련 집합입니다. 기차 45
  • 2 배 : 1 : 시험 5, 6, 10 개 주름을하기 위해

내가

  1. 1 배처럼 훈련 설정을 변경해야합니다 유효성 검사를 통과 6시 10분 테스트를 위해 1 : 5 11:50 기차로

문제는 훈련 세트를 6시 45 분에서 1시 5 분 및 11 시까 지 다른 세트로 이동하는 방법을 모르는 것입니다. : 50. 또는 이보다 더 좋은 루프를 작성할 수 있습니까?

PSS. 이 질문에 답하는 사람이 마음에 들지 않으면 500x28x28 두배가 실제로 의미하는 바가 무엇입니까?

+0

은'500x28x28 double' 그것이 [다차원 배열]을 의미 (http://de.mathworks.com/help/matlab/math/multidimensional-arrays.html) (실제로는 3-D 어레이) 여기서 제 크기 '500'은 예제 (당신의 케이스에있는 그림)의 수를 나타내며, '28x28'은 각 그림의 길이와 너비를 나타냅니다. 각 그림은 28x28의 행렬로 표시됩니다. – uyaseen

+0

@ uyaseen 고마워요. – RHLS

답변

0

다른 사람보다 이해하기 쉽게 일부는 당신이 쓸 수있는 몇 가지 방법이 있습니다. MATLAB은 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 

:로

나는 루프를 시작 것입니다. 가장 안쪽에있는 루프에서만이 숫자가 의 값을 사용하여 숫자 이미지에 해당하는 행렬로 변환됩니다. 물론 원하는 경우 루프의 순서를 서로 바꾸고 모든 폴드를 한자리 숫자로 계산할 수 있습니다. 그것은 모두 결과를 저장하는 방법에 달려 있습니다.

+0

그냥 사용해보세요. 아주 잘 작동합니다. 내가 사용하는 코드보다 훨씬 낫습니다. 그런데 내 강사가 수업 시간에 저에게 제공하는 코드가 있지만이 코드가 마음에 듭니다. 코드가 짧고 간단하며 이해하기 쉽습니다. – RHLS

관련 문제