반응형
Kears란?
케라스(Keras)는 파이썬으로 작성된 오픈 소스 신경망 라이브러리입니다. 케라스는 딥러닝 비전문가라도 각자 분야에서 손쉽게 딥러닝 모델을 개발하고 활용할 수 있도록 직관적인 API를 제공하고 있습니다. 케라스는 텐서플로 위에서 동작하는 라이브러리 입니다. 처음 머신러닝, 딥러닝을 시작하고 매우 간단한 것을 제작하거나 빠른 시간 내에 프로토타이핑을 하고자 한다면 Keras가 훨씬 좋은 선택일 수 있습니다.
keras.layers.Flatten 레이어란?
다양한 상황에서 사용되는 레이어지만, 내가 이 레이어를 처음 사용해 본 것은 Vision Transformer였다. Vision Transformer(줄여서 ViT)는 이미지 3D 데이터를 linear하게 변경해서 트랜스포머에 넣어야 한다. 이때 데이터의 reshape을 위해서 Flatten 레이어가 사용되었다. 즉, Flatten 레이어는 특별하게 무언가를 훈련시키는 레이어가 아니라, 기존 데이터의 shape만 바꾸어주는 레이어이다. 이때 2D 또는 3D의 데이터를 평탄화(flatten)하는 방식으로 shape 변경이 이루어진다.
코드로 예시를 들어주자면 다음과 같이 된다.
>>> x = keras.Input(shape=(10, 64))
>>> y = keras.layers.Flatten()(x)
>>> y.shape
(None, 640) # 10*64
>>> x = keras.Input(shape=(3, 10, 64))
>>> y = keras.layers.Flatten()(x)
>>> y.shape
(None, 1920) # 3*10*64
>>> x = keras.Input(shape=(3, 4, 10, 64))
>>> y = keras.layers.Flatten()(x)
>>> y.shape
(None, 7680) # 3*4*10*64
즉, input의 shape이 어떻든 간에 무조건 1차원으로 평탄화한다.
Flatten 레이어의 옵션들
Flatten 레이어에는 옵션이 data_format
하나만 있다.
keras.layers.Flatten(data_format=None, **kwargs)
이 옵션은 channels_last
와 channels_first
둘 중 하나 고를 수 있다.
- channels_last: 디폴트 옵션으로, 이미지 데이터의 형태가
(batch, ..., channels)
이다. 여기서 "..."은 이미지의 높이와 너비를 의미한다. 즉, 채널이 마지막 차원에 위치한다. - channels_first: 이미지 데이터의 형태가
(batch, channels, ...)
이다. 여기서 "..."은 이미지의 높이와 너비를 의미한다. 즉, 채널이 첫 번째 차원에 위치한다.
참고로, input data shape이 (batch, )
인 경우(즉 feature 축이 없는 경우)에는 자동으로 채널을 추가해 output data shape이 (batch, 1)
이 되도록 만드는 기능이 있다.
Flatten 레이어 구현
모델에 해당 레이어를 추가해주고 싶다면 다음과 같이 하면 된다.
from keras.layers import Flatten
model = Sequential()
model.add(Flatten())
데이터를 직접 해당 레이어에 집어넣고 싶다면, 다음과 같이 하면 된다.
from keras.layers import Flatten
output_data = Flatten()(input_data)
참고 문헌
반응형
'🤖AIML' 카테고리의 다른 글
[Keras] keras.layers.GlobalAveragePooling1D 레이어 이해하기 (0) | 2024.03.11 |
---|---|
[Keras] keras.layers.Dropout 레이어 이해하기 (0) | 2024.02.21 |
[Keras] keras.layers.Dense 레이어 이해하기 (0) | 2024.02.19 |
[트렌스포머 모델 이해하기] Self-Attention에서 Q, K, V(Query, Key, Value)의 의미 (0) | 2024.01.22 |
이진 분류 및 멀티 클래스 분류에서 TP, TN, FP, FN, Recall, Precision, Accuracy 계산하기(Binary Classification & Muti-class Classification) (0) | 2024.01.19 |