본문 바로가기
DNN with Keras/TensorFlow

[TensorFlow] 레이어 (Layer)

by goatlab 2021. 12. 22.
728x90
반응형
SMALL

레이어 (Layer)

 

keras에서 사용되는 레이어(layer, 층)는 신경망 모델을 구성하는 주요한 요소이다. 

 

 

Feature Extraction (특징 추출)

 

feature extraction은 초기 데이터 set를 처리하기 위해 더 관리하기 쉬운 그룹으로 축소하는 차원 감소 프로세스이다. 데이터 양을 효과적으로 줄이면서 원본 데이터 set를 정확하고 완전하게 설명하는 방법이라고 할 수 있다.

 

Flatten Layer

 

input으로 사용하기 위해 행렬이 아닌 list로 만들어주는 과정이 필요한데 flatten layer가 그 역할을 한다. flatten layer는 추출된 주요 특징을 전결합층에 전달하기 위해 1차원 자료로 바꿔주는 layer이다. 이미지 형태의 데이터를 list 형태로 flatten하게 만들어준다. batch size에 영향을 주지 않는다. 예를 들어, CNN에서 convolution layer와 pooling layer를 반복적으로 거치면서 feature extraction에서 추출된 주요 특징은 2차원 데이터로 이루어져 있지만 dense와 같이 분류를 위한 학습 layer에서는 1차원 데이터로 바꾸어서 학습이 되어야 한다. 이때 flatten layer가 2차원 데이터를 1차원 데이터로 바꾸는 역할을 한다.

 

tf.keras.layers.Flatten()

 

input 데이터의 shape가 (batch, )로 되어있다면 flatten layer에 channel dimension을 추가해서 output shape이 (batch,1)로 할 수 있다.

 

이전 layer의 출력정보를 이용하여 입력정보를 자동으로 설정되며 출력 형태는 입력 형태에 따라 자동으로 계산되기 때문에 flatten layer에 사용자가 별도로 parameter를 지정하지 않아도 무방한 경우가 많다.

 

Dense Layer

 

이전 계층의 모든 뉴런과 결합된 형태의 layer(fully-connected layer). dense layer는 다층 퍼셉트론 신경망에서 사용되는 layer로 입력과 출력을 모두 연결해준다. 예를 들어 입력 뉴런이 10개, 출력 뉴런이 10개라고 할 때 총 연결선은 100개가 된다. 각 연결선은 가중치(weight)을 포함하고 있는데 연결강도를 의미한다. 가중치가 높을수록 해당 입력 뉴런이 출력 뉴런에 미치는 영향이 크고, 낮을수록 미치는 영향이 작다.

 

from tensorflow.keras.layers import Dense

Dense(10, input_dim=10, activation='relu')
첫 번째 인자 : 출력 뉴런의 수
input_dim : 입력 뉴런의 수
activation : 활성화 함수

 

Convolutoin Layer

 

합성곱 (Convolution), 채널 (Channel), 필터 (Filter)&Stride, 패딩 (Padding)의 과정을 거쳐 만들어진 layer를 convolution layer라고 한다.

 

tk.keras.layers.Conv2D(filters=3, kernel_size=(3, 3), stride=(1, 1), padding='VALID', activation='relu')
filters : layer에서 나갈 filter의 개수 설정 
kernel_size : filter (weight)의 사이즈
strides : 몇 개의 pixel을 skip 하면서 훑어지나갈지 설정 ( 사이즈에도 영향을 준다. )
padding : zero padding을 설정. VALID는 padding이 없고, SAME은 padding이 있음 (사이즈에도 영향을 줌)
activation : activation function을 설정. 설정하지 않아도 다른 layer에서 가능

 

Pooling Layer

 

pooling layer는 convolution layer의 output을 input으로 사용하며, activation map의 크기를 줄이거나 특정 부분을 강조하는 용도로 사용된다. 어느정도 feature이 추출되었으면 모든 feature 중에서 special한 것으로 사용한다. 주로 사용되는 방법은 max pooling으로 정사각 행렬의 feature 영역 안의 값의 최대값을 그 정사각 행렬의 대푯값으로 사용하는 방법이다. 여기서 사용되는 정사각 행렬은 일반적으로 stride로 설정했던 크기와 동일하다.

 

tk.keras.layers.MaxPool2D(pool_size=(2, 2), stride=(2, 2), padding='SAME')

 

 

 

728x90
반응형
LIST