관리 메뉴

Bull

[DL] Flatten 층이란? 본문

Artificial Intelligence/Deep Learning

[DL] Flatten 층이란?

Bull_ 2024. 3. 2. 23:41

Flatten 층이란?

Flatten 층은 다차원 입력을 1차원으로 평탄화하는 데 사용되는 신경망의 한 층이다.

 

이 층은 입력 데이터의 모든 차원을 하나의 긴 벡터로 변환한다.

 

이 과정은 주로 이미지 데이터와 같이 다차원 데이터를 다루는 컨볼루션 신경망(CNN)에서 특징을 추출한 후, 완전 연결 층(Fully Connected Layer)에 입력하기 전에 사용된다.

 

Flatten 층을 사용함으로써, 모델이 다차원 데이터를 이해하고 처리한 뒤, 분류나 회귀 같은 다음 단계를 수행할 수 있도록 데이터를 적절한 형태로 변환한다.

 

 

 

 

TensorFlow와 Keras를 사용한 Flatten 층 코드 예시

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense

# 모델 생성
model = Sequential()

# 모델에 컨볼루션 층 추가
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))

# Flatten 층 추가
model.add(Flatten())

# 완전 연결 층 추가
model.add(Dense(units=10, activation='softmax'))

# 모델 요약 출력
model.summary()

 

 

결과

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #
=================================================================
 conv2d (Conv2D)             (None, 26, 26, 64)        640

 flatten (Flatten)           (None, 43264)             0

 dense (Dense)               (None, 10)                432650

=================================================================
Total params: 433290 (1.65 MB)
Trainable params: 433290 (1.65 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________


 Conv2D 컨볼루션 층을 통해 입력 이미지에서 특징을 추출하고, Flatten 층을 사용하여 이 특징들을 1차원 벡터로 평탄화한 다음, Dense 층을 통해 최종적으로 분류를 수행한다.

 

input_shape=(28, 28, 1)는 입력 이미지가 28x28 크기에 채널이 1개(흑백 이미지)임을 의미한다.

 

Dense 층의 units=10은 모델이 최종적으로 10개의 클래스 중 하나를 예측한다는 것을 의미한다.

 

 

 

 

요약


Flatten 층은 다차원 데이터를 1차원 벡터로 변환하는 데 사용
되며, 

 

주로 컨볼루션 신경망(CNN)에서 특징 추출 후 완전 연결 층(Fully Connected Layer)에 데이터를 전달하기 위해 사용한다.