줘이리의 인생적기

[tensorflow 21] 레이어 본문

공부/tensorflow

[tensorflow 21] 레이어

줘이리 2021. 5. 24. 21:19
728x90

이제까지 사용했었던 레이어들을 다시 한번 상기시켜 볼까요?

 

첫 번째, 제일 많이 사용했었던 Dense layer 입니다.

신경망에서 가장 기본 레이어 이며, 각 뉴런이 서로 완전히 연결되는 Fully connected layer라고도 합니다.

 

두 번째, Fashion MNIST에서 사용했었던 Flatten layer 입니다.

다차원의 이미지를 1차원으로 평평하게 바꿔주는 레이어 입니다.

 

이제부터 컨볼루션 신경망의 구조를 살펴보고, 여러 레이어에 대해서 알아보겠습니다.


 

https://www.kernix.com/article/a-toy-convolutional-neural-network-for-image-classification-with-keras/

이미지 분류에서는 Feature Extractor를 거친 후 Classifier를 거치게 되는데

 

Convolution layer, Pooling layer가 Feature Extractor에 해당하며, Dense layer가 Classifier에 해당합니다.

 

Feature extractor에는 Convolution layer와 Pooling layer가 교차로 배치되며,

 

Classifier에는 Dense layer가 배치되는데 사이에 과적합을 막기 위해 dropout layer가 배치됩니다.

 


컨볼루션 레이어(Convolution layer)는 컨볼루션 연산을 하는 레이어입니다.

 

1차원에서 3차원까지 다양한 차원으로 사용할 수 있습니다.

 

연산을 할 때 사용되는 필터는 네트워크의 학습을 통해 자동으로 추출되지만 필터의 개수는 사람이 지정합니다.

 

예를 들어, RGB채널을 가진 이미지에 컨볼루션 연산을 적용한 결과, 마지막 이미지의 차원 수는 필터의 개수와 동일합니다.

 

컨볼루션 신경망은 뒤쪽 레이어일수록 필터의 개수가 많기 때문에 마지막 이미지의 차원 수는 점점 많아집니다.

 


tf.keras에서 임포트 될 수 있는 컨볼루션 레이어 인자에 대해 알아보겠습니다.

 

tf.keras.layers.Conv2D를 사용하고 주요 인수로는 kernel_size, strides, padding, filters입니다.

 

kernel_size는 필터 행렬의 크기입니다.

kernel_size = (5,3)은 높이 5, 너비 3인 필터행렬 크기 이고,

kernel_size = (3)은 높이 3, 너비 3인 필터행렬 크기를 뜻합니다.

 

strides는 한 필터 계산과정에서 한 스텝마다 이동하는 크기입니다.

기본값은 strides = (1,1)이며, 내용 안의 내용은 kernel_size와 동일합니다.

 

padding은 연산 전에 입력 이미지 주변에 빈 값을 넣을지 지정하는 옵션입니다.

padding='valid'는 빈 값을 사용하지 않는다는 뜻이고,

padding='same'은 빈 값을 넣어 이미지의 크기를 입력과 같도록 보존하겠다는 뜻입니다.

빈 값을 다 0으로 채우는 것을 그 유명한 제로패딩(zero padding)이라고 하죠.

 

filters는 필터의 개수입니다.

개수는 네트워크가 얼마나 많은 특징을 추출하는가 이기 때문에 많으면 좋지만, 너무 많으면 학습 속도가 느려질 수 있고 과적합이 발생합니다.

 


풀링 레이어(Pooling layer)는 중요한 정보만 남기고 크기를 줄이기 위해 사용하는 레이어입니다.

 

메모리 사용에 도움이 될 뿐만 아니라, 과적합을 방지하는 효과도 있습니다.

 

풀링 레이어에는 Max pooling, Average pooling 레이어등이 있습니다.

 


맥스 풀링 레이어 인자에 대해 알아보겠습니다.

 

tf.keras.layers.MaxPool2D를 사용하며, pool_size, strides 등의 인자가 있습니다.

 

pool_size는 한번에 Max 연산을 수행할 범위입니다.

 

strides는 컨볼루션 레이어의 인자와 동일합니다.

 


드롭아웃 레이어(Dropout layer)에 대해서 알아보겠습니다.

 

이 레이어는 과적합을 막기 위한 레이어로, 학습 과정에서 무작위로 뉴런의 부분집합을 제거합니다.

 

레이어에 있는 뉴런들은 학습할 때 결과값에 의해 같은 영향을 받고, 한쪽으로 치우치게 됩니다.

 

이를 막기 위해 확률적으로 뉴런에 대한 연결을 끊고, 테스트할 때만 정상적으로 포함해서 계산합니다.

 


tf.keras.layers.Dropout을 사용하며, 인자로는 rate가 있습니다.

 

rate는 제외할 뉴런의 비율을 나타냅니다.

 

'공부 > tensorflow' 카테고리의 다른 글

[tensorflow 23] Fashion MNIST03  (0) 2021.05.26
[tensorflow 22] Fashion MNIST02  (0) 2021.05.25
[tensorflow 20] CNN - 특징 추출  (0) 2021.05.21
[tensorflow 19] Fashion MNIST01  (0) 2021.05.20
[tensorflow 18] 다항분류  (0) 2021.05.20