본문 바로가기
Data Science/Deep Learning

CNN 합성곱 신경망 Flatten Layer의 역할 및 방법

by Queen2 2022. 11. 30.
728x90
반응형

일반적인 CNN 레이어 구성을 보면 Input > Convolutional layer > Pooling Layer > Faltten layer > Fully Connected Layer 이런 식으로 진행되는걸 볼 수 있는데요. 합성곱 신경망의 가장 특징적인 레이어가 합성곱층과 풀링층이라, 주로 CNN 앞단층에 대한 설명은 많이 들어봤지만, 뒷 단계인 Flatten과 Fully Connected(FC)레이어에 대한 설명은 많이 다루지 않는 것 같아서 짚고 넘어가려 합니다. 

 

합성곱층은 필터를 통해 데이터의 특징을 추출하고 풀링 레이어는 계산 과정에서 매개변수 수를 줄이고, 모델의 과적합을 방지한다는 목적이 있죠. 그렇다면 Flatten layer는 왜 존재할까요?! 결론부터 말하자면, Flatten layer은 분류/예측을 위한 Fully Connected Layer에 적용되는 벡터형태의 인풋을 만들어주는 역할을 합니다.

 

 

https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-3-flattening

 

위 사진처럼 풀링한 레이어를 계산을 위한 인공신경망에 넣기 위한 중간 다리 단계가 Flatten이 되는거죠

만약 Flatten이 없다면 (h,w,channel) 같은 3차원의 데이터가 인공신경망에 그대로 들어가게 되는데 형태가 맞지 않기 때문에 CNN에서 Flatten 레이어 없이 Dense로 연결시켜서 출력하면 에러가 뜨게 됩니다!

 

https://indiantechwarrior.com/fully-connected-layers-in-convolutional-neural-networks/

 

Flatten레이어는 (텐서플로우 기준) Flatten()을 이용하기도 하고 VGGNet 코드를 기준으로 봤을 때는 GlobalAvgPool2D()을 사용하기도 합니다. 목적상으로는 FC Layer의 인풋에 적합한 형태를 만들어준다는 공통점이 있지만 계산 방식에는 차이가 있습니다.

 

tf.keras.layers.Flatten

(sample수, height,width,channel) ==> (sample수,height*width*channel)

차원을 reshape 해줍니다.

 

tf.keras.layers.GlobalAveragePooling

GlobalAveragePooling 레이어 전의 가장 마지막 레이어의 채널별 평균 ((sample,h,w,channel)에서 가장 마지막 axis) 값을 계산하여 출력하는 것이 GAP의 주요 개념입니다. 어떻게 형변환이 이루어지는지 보겠습니다.

(sample수, height,width,channel) ==> (sample수,channel)

 

변환된 모양만 보더라도 CNN 입장에서 계산할 파라미터 수가 훨씬 적겠죠? 조사를 해보니 근래에는 FC layer 대비 공간 정보 손실이 적고, 파라미터 수가 적어지면서 과적합 방지 효과가 있고 계산 속도가 빠른 GAP를 주로 사용한다고 합니다

 

 

참고자료:

https://paperswithcode.com/method/global-average-pooling

https://paperswithcode.com/method/global-average-pooling

https://mole-starseeker.tistory.com/66

https://stackoverflow.com/questions/49295311/what-is-the-difference-between-flatten-and-globalaveragepooling2d-in-keras

https://medium.datadriveninvestor.com/five-powerful-cnn-architectures-b939c9ddd57b

https://indiantechwarrior.com/fully-connected-layers-in-convolutional-neural-networks/

https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-3-flattening

728x90
반응형

댓글