Flatten Layer (평탄화 계층)

5단 분석법

순서
분석
단어
내용
1
일반 명사
Flatten
납작해지다, 깨부수다
Layer
막, 층, 겹
Flatten Layer
납작한 층? 깨부순 층?
2
고유 명사
Flatten Layer
다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여, 주로 Fully Connected Layer(Dense Layer)에 입력으로 사용할 수 있도록 하는 신경망 레이어
3
사용 이유
Flatten Layer
다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여, Dense 레이어와 같은 전결합 층에 연결할 수 있도록 하기 위해서
4
사용 방법
Flatten Layer
1. 라이브러리 임포트 2. 모델 생성 3. 레이어 추가 4. Flatten 레이어 추가 5. 모델 컴파일 6. 모델 훈련
5
다른 기술과의 비교
Flatten Layer
-

정의

일반 명사

Flatten
납작해지다, 깨부수다
Layer
막, 층, 겹
Flatten Layer
납작한 층? 깨부순 층?
Flatten은 납작해지다, 깨부수다 라는 의미를 가진 단어입니다.
Layer는 막, 층, 겹이라는 뜻을 가지고 있습니다.
Flatten Layer는 납작한 층 또는 깨부순 층이라고 추측해 볼 수 있습니다.
고유 명사를 한 번 알아볼까요?

고유 명사

Flatten Layer
다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여, 주로 Fully Connected Layer(Dense Layer)에 입력으로 사용할 수 있도록 하는 신경망 레이어
Flatten Layer는 다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여, 주로 Fully Connected Layer(Dense Layer)에 입력으로 사용할 수 있도록 하는 신경망 레이어 입니다.
Flatten Layer는 CNN(Convolutional Neural Network) 모델에서 주로 사용합니다.
Conv2D는 Convolutional Layer에서 행렬(≒이미지)들의 집합이다.
MaxPooling2D는 MaxPooling 연산을 진행한 행렬들의 집합이다.
Flatten Layer는 Conv2D(Convolution2D)와 MaxPooling2D 레이어를 거쳐 추출된 다차원 특징 맵을 1차원 벡터로 변환합니다.
즉, 2차원 배열 상태인 이미지를 1차원 벡터로 변환하는 것 입니다.
이 1차원 벡터는 Fully Connected Layer(Dense Layer)로 입력되어 분류 작업 등을 수행합니다.

사용 이유

Flatten Layer
다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여, Dense 레이어와 같은 전결합 층에 연결할 수 있도록 하기 위해서
Flatten Layer를 사용하는 주요 이유는 다차원 배열 형태의 입력 데이터를 1차원 배열로 변환하여 Dense 레이어와 같은 전결합 층에 연결할 수 있도록 하기 위해서입니다.
다차원 배열 데이터를 1차원으로 변환함으로써, Dense 레이어가 해당 데이터를 처리하고 분류 작업 등을 수행할 수 있게 됩니다.
특히 CNN 모델에서는 이미지의 특징을 추출한 후 이를 분류하기 위해 Flatten Layer를 사용하여 데이터를 변환합니다.
또한, Flatten Layer는 모델의 구조를 단순화하고, 학습과 추론 과정을 효율적으로 만들어줍니다.
다차원 데이터를 직접 처리하는 대신, Flatten Layer를 통해 1차원으로 변환하여 Dense 레이어에서 쉽게 다룰 수 있습니다.
이를 통해 모델의 성능을 향상시키고, 학습 시간을 단축할 수 있습니다.

사용 방법

Flatten Layer
1. 라이브러리 임포트 2. 모델 생성 3. 레이어 추가 4. Flatten 레이어 추가 5. 모델 컴파일 6. 모델 훈련

TensorFlow (Keras)

PyTorch

미니퀘스트

1번 미니퀘스트 - MNIST 데이터셋을 이용한 Flatten Layer 사용

문제 설명

1.
라이브러리 임포트
필요한 라이브러리를 임포트합니다.
2.
데이터셋 로드 및 전처리
MNIST 데이터셋을 로드하고, 데이터를 전처리합니다.
# 데이터셋 로드 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 데이터 정규화 x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0 # 레이블 원-핫 인코딩 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10)
Python
복사
3.
모델 생성
Sequential 모델을 생성하고, Flatten Layer를 추가합니다.
4.
모델 컴파일
5.
모델 훈련
6.
모델 평가

코드

# 1. 라이브러리 임포트 from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Input, Flatten, Dense from tensorflow.keras.utils import to_categorical # 2. 데이터셋 로드 및 전처리 # 데이터셋 로드 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 데이터 정규화 x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0 # 레이블 원-핫 인코딩 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # 3. 모델 생성 model = Sequential() model.add(Input(shape=(28, 28))) # Input 레이어 추가 model.add(Flatten()) # Flatten Layer 추가 model.add(Dense(10, activation='softmax')) # Dense Layer 추가 # 4. 모델 컴파일 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 5. 모델 훈련 model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1) # 6. 모델 평가 loss, accuracy = model.evaluate(x_test, y_test) print(f"Test loss: {loss}") print(f"Test accuracy: {accuracy}")
Python
복사

결과 (예시)

Test loss: 0.07824419438838959
Test accuracy: 0.9750999808311462

결과 설명

Test loss (0.0782)
손실 함수의 값입니다.
손실 함수는 모델이 예측한 값과 실제 값 간의 차이를 측정합니다.
값이 낮을수록 모델의 예측이 실제 값과 가깝다는 것을 의미합니다.
여기서 0.0782라는 값은 매우 낮은 손실을 나타내며, 모델이 상당히 잘 학습되었음을 의미합니다.
Test accuracy (0.9751)
정확도입니다.
이는 모델이 테스트 데이터에서 얼마나 잘 예측했는지를 나타내는 지표로, 97.51%의 정확도를 의미합니다.
이는 매우 높은 정확도로, 모델이 MNIST 데이터셋에서 손 글씨 숫자를 잘 분류하고 있음을 나타냅니다.

코드 설명

2번 미니퀘스트 - CIFAR-10 데이터셋을 이용한 Flatten Layer 실습

문제 설명

1.
라이브러리 임포트
필요한 라이브러리를 임포트합니다.
2.
데이터셋 로드 및 전처리
CIFAR-10 데이터셋을 로드하고, 데이터를 전처리합니다.
# 2. 데이터셋 로드 및 전처리 # 데이터셋 로드 (x_train, y_train), (x_test, y_test) = cifar10.load_data() # 데이터 정규화 x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0 # 레이블 원-핫 인코딩 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10)
Python
복사
3.
모델 생성
Sequential 모델을 생성하고, Flatten Layer를 추가합니다.
4.
모델 컴파일
모델을 컴파일합니다.
5.
모델 훈련
모델을 훈련시킵니다.
6.
모델 평가
훈련된 모델을 평가합니다.

코드

from tensorflow.keras.datasets import cifar10 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Input, Flatten, Dense from tensorflow.keras.utils import to_categorical # 2. 데이터셋 로드 및 전처리 # 데이터셋 로드 (x_train, y_train), (x_test, y_test) = cifar10.load_data() # 데이터 정규화 x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0 # 레이블 원-핫 인코딩 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # 3. 모델 생성 model = Sequential() model.add(Input(shape=(32, 32, 3))) model.add(Flatten()) model.add(Dense(10, activation='softmax')) # 4. 모델 컴파일 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 5. 모델 훈련 model.fit(x_train, y_train, epochs=10, batch_size=64, validation_split=0.1) # 6. 모델 평가 loss, accuracy = model.evaluate(x_test, y_test) print(f"Test loss: {loss}") print(f"Test accuracy: {accuracy}")
Python
복사

결과 (예시)

Test loss: 1.5705233812332153
Test accuracy: 0.43560001254081726

결과 설명

Test loss (1.5705)
손실 함수의 값입니다.
이 값은 예제 코드의 손실보다 훨씬 높은 값입니다.
이는 모델이 예측한 값과 실제 값 간의 차이가 크다는 것을 의미하며, 모델의 예측 성능이 좋지 않다는 것을 나타냅니다.
Test accuracy (0.4356)
정확도입니다.
이는 모델이 테스트 데이터에서 얼마나 잘 예측했는지를 나타내는 지표로, 43.56%의 정확도를 의미합니다.
이는 낮은 정확도로, 모델이 CIFAR-10 데이터셋에서 이미지 분류 작업을 잘 수행하지 못했음을 나타냅니다

코드 설명

미니퀘스트 답안지

ⓒ 2024 startupcode. 모든 권리 보유. 무단 복제 금지.