본문 바로가기

[ 프로그래밍 ]/신경망(Neural Network)

BP를 이용한 문자 학습 및 인식

부제 : BP를 이용한 ㄱ, ㄴ, ㄷ 학습 및 인식

 

 

이전 글에 이어,
알고리즘을 수정하고 BPNET 클래스를 만들어서 테스트.

주요 추가/수정 내용으로,
1) 초기 연결 강도를 자동으로 설정
2) 일반 BP 학습법과 모멘텀 BP 알고리즘 선택 가능
3) 출력값이 1차원이던 것을 다차원 가능한 형태로 수정
4) 기타 잡다한 버그 수정

수정된 BP 알고리즘을 이용하여,
아래 그림의 문자들을 학습


입력벡터 :
x1 = { 1, 1, 1, 0, 0, 1, 0, 0, 1}
x2 = { 1, 0, 0, 1, 0, 0, 1, 1, 1}
x3 = { 1, 1, 1, 1, 0, 0, 1, 1, 1}

목표 :
t1 = { 0, 0 }
t2 = { 0, 1 }
t3 = { 1, 0 }


학습결과 아래와 같이 연결강도가 변경됨

v = [ 0.14 -1.31 -1.20 0.19 -0.04 -0.21 0.23 0.68 0.11 0.18 ]
     [ -0.14 2.11 1.88 -0.31 0.16 0.42 -0.76 -0.22 0.08 -0.84 ]
     [ -0.41 3.57 3.33 -1.02 0.31 0.33 -1.05 -0.83 -0.16 -0.15 ]

w = [ 20.35 -17.85 32.20 -18.97 ]
      [ 2.54 -3.00 -7.02 3.40 ]

최종 출력 오차 : 0.01
반복 학습 횟수 : 1349회


이를 이용 학습용 데이터 3개를 인식.
인식결과 학습은 제대로 되는 것으로 판단된다.

x1 = [ 0.09 0.00 ]
x2 = [ 0.04 0.99 ]
x3 = [ 0.91 0.01 ]


아래 그림과 같이 변형된 3개의 데이터를 이용하여 인식한 결과,
인식 결과 잘 나옴.


x1' = [ 0.06 0.00 ]
x2' = [ 0.00 0.98 ]
x3' = [ 0.88 0.00 ]


이후,
학습 속도 및 출력오차를 줄이고 인식률을 높일 수 있는 방법을 생각해 보고,
기존에 사용하던 통계학적 알고리즘과 출력오차를 비교해볼 예정.
또한 실세계 영상으로부터 실제 획득된 문자들을 대상으로 학습 및 인식 결과를 볼 예정.




BPNET.h
BPNET.cpp
bp.cpp






Reference
[1] 오창석, "뉴로컴퓨터", 내하출판사