flatten layer는 추출된 주요 특징을 전결합층에 전달하기 위해 1차원 자료로 바꿔주는 layer이다.
이미지 형태의 데이터를 배열형태로 flatten하게 만들어준다.
batch size에 영향을 주지 않는다.
tf.keras.layers.Flatten()
만약 input 데이터의 shape이 (batch,)로 되어있다면 flatten layer가 추가적으로 channel dimension을 추가하여 output shape이 (batch,1)이 된다.
CNN에서 컨볼루션 레이어나 맥스풀링 레이어를 반복적으로 거치면 주요한 특징만 추출되고 추출된 주요 특징은 전결합층에 전달되어 학습된다.컨볼루션 레이어나 맥스풀링 레이어는 주로 2차원 자료를 다루지만 전결합층에 전달하기 위해서는 1차원 자료로 바꿔주는 것이 필요한데 이 때 사용되는 것이 flatten layer이다.
이전 레이어의 출력정보를 이용하여 입력정보를 자동으로 설정되며 출력 형태는 입력 형태에 따라 자동으로 계산되기 때문에 flatten layer에 사용자가 별도로 파라미터를 지정하지 않아도 무방한 경우가 많다.
keras에서 사용되는 레이어(layer, 층)는 신경망 모델을 구성하는 주요한 요소이다.
이 중 dense layer는 다층 퍼셉트론 신경망에서 사용되는 레이어로 입력과 출력을 모두 연결해준다.
예를 들어 입력뉴런이 3개,출력뉴런이 8개라고 할 때 총 연결선은 개가 된다.
각 연결선은 가중치(weight)을 포함하고 있는데 연결강도를 의미한다. 가중치가 높을수록 해당 입력뉴런이 출력뉴런에 미치는 영향이 크고, 낮을수록 미치는 영향이 작다.
from tensorflow.keras.layers import Dense
Dense(8, input_dim=3, activation='relu')
첫 번째 인자: 출력 뉴런의 수
input_dim
: 입력 뉴런의 수
activation
: 활성화 함수 설정하기
문제의 목적에 따라 활성화 함수를 적절하게 사용하여야 한다.
- lenear : default 값으로 입력 뉴런과 가중치로 계산된 결과값이 그대로 출력됨.
- relu : rectifier 함수로 은닉층에 주로 사용됨.
- sigmoid : 시그모이드 함수로 이진 분류 문제에서 출력층에 주로 쓰임.
- softmax : 다중 클래스 분류 문제에서 출력층에 주로 쓰임.