Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
CNN의 합성곱 연산을 매트릭스 곱으로 구현한다면 본문
뭐 구현하는 방법을 쓸게아니라 제가 이해한 내용을 끄적인 글입니다.
ㅇㅅㅇ;;
이 문서 중간쯤의 '매트릭스 곱으로 구현' 항목을 읽고 그림으로 옮겨봤습니다.
... 똥손이라 죄송합니다.
CNN의 합성곱 연산은 커널을 슬라이딩하면서 출력값을 계산한다는건 유명한(?) 사실입니다.
이걸 매트릭스 연산으로 바꾸는 방법이 이것인데 저는 수학을 잘 모르므로 문과스럽게 설명할겁니다. 그렇다고 문과인건 아닙닏ㅌㅌ
또한 위 글에서와는 다르게 채널의 크기를 3이 아니라 1로 두어서 생략할겁니다.
- 이미지의 크기가 227x227이고 커널의 크기가 11x11이며 stride가 4라면 일단 이미지의 11x11 영역에 대해서 커널과 연산을 할겁니다.
- 이때의 11x11 영역의 이미지 데이터를 11x11=121크기의 열 벡터로 바꿉니다. 이게 그림에서의 '슬라이드 1'이 되는겁니다.
- 슬라이딩을 55x55=3025번 진행하므로 슬라이드는 총 3025개가 되며 결과적으로 [K, n] 행렬은 [121, 3025]가 될겁니다.
- 이제 커널 행렬[k, K]을 구해봅시다.
- 커널도 똑같이 11x11=121이므로 이걸 행 벡터로 펼치면 그림에서의 '커널1'이 됩니다.
- 예시에서 커널이 96개이므로 결과적으로 [k, K]행렬은 [96, 121]행렬이 됩니다.
- 이제 이 둘을 행렬곱해주기만 하면 96개의 커널(11x11)과 하나의 이미지(227x227)를 stride 4로 합성곱한 결과[96, 3025]가 나오게 됩니다.
- 이걸 [55, 55, 96](55x55 크기로 줄었고 96개 커널과의 연산에 대한 결과라는 뜻)으로 reshape해주면 진짜 결과가 됩니다.
헤헷 수알못이 이해하려니 힘드네요.
'자료' 카테고리의 다른 글
실시간 지진계 파형 보는 방법 - Swarm 사용법 (4) | 2018.02.16 |
---|---|
기계학습 용어집 (0) | 2018.01.22 |
온라인 컴파일러 및 코드/결과 공유 사이트 - Ideone.com (0) | 2018.01.16 |
정규식 테스트 사이트 추천 - RegExr (0) | 2018.01.10 |
Tavis로 Rust 프로젝트 빌드하고 뱃지 달기 (0) | 2018.01.09 |
Comments