learn 함수를 호출하는 wile 문이 너무 길어져서 지저분 해보여서, pattern을 ArrayList로 미리 넣어두고 학습을 하도록 변경하였습니다.
그리고 double보다 속도를 높이기 위해서 전체적으로 float로 변경하였습니다.
기존 코드
while( true ) {
loop_count++;
E_sum = 0;
//Step 3 : For each training pattern pair
//do Step 4-10 until k = p
// k=1
x[0] = 0.0f;
x[1] = 0.0f;
y[0] = 0.0f;
E_sum += nnbp.learn(x,y);
// k=2
x[0] = 0.0f;
x[1] = 1.0f;
y[0] = 1.0f;
E_sum += nnbp.learn(x,y);
// k=3
x[0] = 1.0f;
x[1] = 0.0f;
y[0] = 1.0f;
E_sum += nnbp.learn(x,y);
// k=4
x[0] = 1.0f;
x[1] = 1.0f;
y[0] = 0.0f;
E_sum += nnbp.learn(x,y);
// Step 11 : Test stop condition
if( E_sum < E_MAX ) break;
}
개선 코드
wile 문 내부가 간단해 졌습니다.
while( true ) {
loop_count++;
E_sum = nnbpv2.epoch(xPatterns,yPatterns);
if( E_sum < E_MAX ) break;
}
epoch 함수 내에서 learn 함수를 호출 하도록 변경하였습니다.
public float epoch(ArrayList<float[]> xPatterns, ArrayList<float[]> yPatterns) {
int patternCount = xPatterns.size();
float err = 0f;
for( int i = 0 ; i < patternCount ; i++ ){
float x[] = xPatterns.get(i);
float y[] = yPatterns.get(i);
err += learn(x,y);
}
return err;
}
소스
댓글 없음:
댓글 쓰기