소스코드는 여기서 확인가능(macOS에서 동작확인함)

convolution 자체에 대한 좋은 튜토리얼은 여기

일반적인 CNN에 대해서 좋은 튜토리얼 여기(1D CNN포함)

CNN기초

원본 데이터를 2차원으로 놓고 필터(또는 feature detector)라는 사각형 윈도우를 씌운다음에 움직이면서 새로운 값을 만들어 낸다.
이때 움직이는 과정을 convolution이라고 하고, 필터가 움직이는 방향이 한 방향이면 1D-CNN이고 두 방향이면 2D-CNN이다.
위의 그림에서 보듯이 1차원 CNN이라 하더라도 필터의 사각형이 반드시 1차원인건 아니다. 움직이는 콘볼루션 방향및 결과로 나오는 배열이 1차원인지 2차원인지 따지는 것

1D CNN

센서 데이터로 부터 정해진 구간(예를 들면 2초)에 대해서 classification을 하려고 할때 1D-CNN을 쓰면 좋다.
1D CNN이 필요한 경우에 대해서는 여기를 참조하자.
여기 자료 좋다.

A 1D CNN is very effective when you expect to derive interesting features from shorter (fixed-length) segments of the overall data set and where the location of the feature within the segment is not of high relevance.

짧은 구간에 대해서 흥미로운 패턴을 인식하고 싶고, location에 상관없을 때 좋다고 한다. 2D이미지로 따지자면 고양이가 이미지 상에서 어느 location에 있던지 상관없어야 하니 맞는말인듯 하다. 주식에 대입해보면 어떨까? 아쉽게도 주식은 trend 및 seasonality가 존재하기 때문에 location에 영향을 받는다고 해야할 것 같다. 상승 패턴이라고 하더라도 방금전에 나온것과 한달전에 나온것은 다르기 때문이다.



여기 개념 잘 봐두자.


[첫번째 conv layer]

센서x,y,z를 width로 둔다 따라서 값은 3

feature detector 또는 필터의 경우 가로3, 세로 10의 사이즈를 가진다.

이 필터를 아래쪽으로 height만큼 슬라이딩 한다. (80-10+1 = 71)

필터 하나당 숫자 하나가 나와서 결과적으로 71개의 숫자가 나오고 필터 개수가 100개면  71x100개의 아웃풋이 나온다.

(위의 그림의 경우 height라고 표시하고 개념은 커널사이즈인걸로 보여서 헷갈린다. 문서 뒷부분에 보면 height랑 kernel size를 같은거라고 또 적어놨다 -_-)

아래그림에서 height는 인풋에 들어가는 개수라고 설명되어 있다. 최근 80개의 센서값이 네트웍 인풋으로 들어간다는 듯


[두번째 conv layer]

비슷한 작업을 한차례 더한다. (71-10+1 = 62)

해서 62 x 100 사이즈의 아웃풋이 나온다.


[pooling]

3개당 하나씩 풀링해서 62x100을 20x100으로 만든다 (왜 21이 아니고 20일까?)


그 이후는 트리비얼 한듯





































반응형

'AI, ML > ML' 카테고리의 다른 글

Word2Vec  (0) 2019.04.24
weka  (0) 2019.02.28
의사결정나무(Decision Tree)  (0) 2019.02.07
[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Standardization vs normalization  (0) 2019.01.04

+ Recent posts