관리 메뉴

마틴블로그닷넷

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

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

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

K. Martin 2010.05.04 12:11

부제 : 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] 오창석, "뉴로컴퓨터", 내하출판사


8 Comments
  • 2010.05.04 16:04 비밀댓글입니다
  • 2010.10.21 17:11 비밀댓글입니다
  • Favicon of http://martinblog.net K. Martin 2010.10.22 01:13 신고 오랜 기간의 노하우가 집적되어 있는 내용을 쉽게 드릴 수 없어 유감입니다. 소스는 드릴 수가 없습니다.
  • Favicon of http://iiwe.tistory.com cbk1411 2010.12.05 18:20 신고 안녕하세요. 3학년 학부생입니다.
    인식기 성능이 대단하네요 인공지능 수업을 듣다보니 얼마나 많은 노력을 하셨는지 알겠네요.

    질문이 있어서 이렇게 글을 남깁니다.
    0부터 9가 각각 그려진 비트맵파일을 0과 1로 변환하여
    MLP와 PSO를 합쳐서 문자인식기를 제작중입니다.

    13*16의 0과 1로 이루어진 배열로 학습을 시키는데요
    hidden layer를 10개로 늘려봐도 느려지기만 할 뿐, 그닥 유효한 결과가 나오질 않네요 ㅠㅠ

    각 hidden layer는 209부터 1까지 얼추 균등하게 줄였습니다.

    제가 질문드리는 것은,
    적절한 hidden layer의 갯수와 각 레이어의 weight 수를 어느정도 범위에서 실험하는 것이 올바른지입니다.

    지금 시간은 부족한데 이틀을 꼬박 달려도 잘 되질 않네요. 도와주세요 ㅠㅠ
  • Favicon of http://martinblog.net K. Martin 2010.12.05 23:04 신고 은닉층 뉴런의 수 p는 1989년 G. Mirchandini와 W. Cao가 제안한 방법을 일반적으로 사용하며,
    p = log2M 을 이용하여 구합니다.
    이때 M은 선형 분리 가능한 영역의 최대 수를 의미하고요.
  • 2012.12.26 15:13 비밀댓글입니다
  • nk0429 2013.08.22 00:04 신고 입문자에게 큰 도움이 되는 좋은 글 올려주셔서 항상 감사하게 생각하고 있습니다^^

    은닉층의 뉴런수를 구할때 log2M을 이용하여 구하신다고 하셨는데,

    이때 선형 분리 가능한 최대 영역의수가 ㄱ, ㄴ, ㄷ의 경우 몇개가 되는 건가요?
  • ls 2014.08.16 16:32 신고 3개의 목표 데이터를 학습 시킬 때 하나를 다 학습시키고 다음 목표데이터를 학습시키고 그 학습이 다 되면 또 그다음 목표데이터를 학습시키는 방식으로 하는건가요? 저는 이렇게 하면 마지막에 학습된 데이터만 나오는데... 조언 부탁드립니다.
댓글쓰기 폼