데이터 증강(Data Augmentation)은 기존 학습 데이터에 무작위 변형을 가해 사실적으로 보이는 새로운 학습 데이터를 추가함으로써 과적합(Overfitting)을 줄이는 효과적인 기법입니다. Keras에서는 RandomFlip 레이어 등을 포함하는 Sequential 모델을 구성해 이를 간단히 구현할 수 있습니다.
Keras Sequential API와 CNN
이 글에서는 Keras Sequential API를 사용합니다. Sequential API는 평범한 레이어 스택(stack) 형태로 모델을 구성할 때 특히 유용하며, 각 레이어는 정확히 하나의 입력 텐서와 하나의 출력 텐서를 갖습니다.
이미지 분류 작업에는 합성곱 신경망(Convolutional Neural Network, CNN)을 활용해 학습 모델을 구축할 수 있습니다.
예제 데이터셋: 5종의 꽃 이미지
이 예제에서는 keras.Sequential 모델로 이미지 분류기를 생성하고, preprocessing.image_dataset_from_directory 유틸리티를 사용해 디스크에서 데이터를 효율적으로 불러옵니다. 전체 작업 흐름은 다음과 같습니다.
- 디스크에서 데이터를 효율적으로 로드
- 과적합 여부 식별
- 데이터 증강과 드롭아웃(dropout) 같은 기법을 적용해 과적합 완화
사용되는 꽃 데이터셋에는 총 3,700장의 이미지가 담겨 있으며, 클래스당 하위 디렉터리 하나씩, 총 5개의 하위 디렉터리로 구성되어 있습니다. 클래스는 다음과 같습니다.
- daisy(데이지)
- dandelion(민들레)
- roses(장미)
- sunflowers(해바라기)
- tulips(튤립)
실행 환경: Google Colaboratory
아래 코드는 Google Colaboratory(Colab) 환경에서 실행됩니다. Colab은 브라우저에서 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU를 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
과적합이 발생하는 이유와 데이터 증강의 원리
학습 예시의 수가 적으면 모델은 훈련 데이터 속 노이즈나 불필요한 세부 정보까지 학습하게 됩니다. 이는 새로운 데이터에 대한 모델 성능에 부정적인 영향을 미칩니다.
과적합이 발생하면 모델이 새로운 데이터셋에 대해 잘 일반화하지 못합니다. 과적합을 피하는 방법은 여러 가지가 있으며, 여기서는 그중 데이터 증강을 활용합니다.
데이터 증강은 기존 예시에 무작위 변환(random transformation)을 적용해 실제처럼 보이는 이미지를 추가로 생성하는 기법입니다. 이를 통해 모델은 데이터의 더 다양한 측면을 경험하게 되고, 결과적으로 일반화 성능이 향상됩니다. 아래는 그 예시입니다.
예제
print("데이터 증강을 통해 과적합 제거하기")
data_augmentation = keras.Sequential(
[
layers.experimental.preprocessing.RandomFlip("horizontal",input_shape=(img_height,
img_width,3)),
layers.experimental.preprocessing.RandomRotation(0.1),
layers.experimental.preprocessing.RandomZoom(0.1),
]
)코드 출처 − https://www.tensorflow.org/tutorials/images/classification
출력 결과
데이터 증강을 통해 과적합 제거하기
코드 설명
데이터 증강은 tf.keras.layers.experimental.preprocessing 모듈의 레이어들을 사용해 구현할 수 있습니다.
이러한 레이어는 다른 레이어처럼 모델 내부에 포함되며, GPU 위에서 실행됩니다.
이를 통해 과적합을 제거하거나 그 정도를 크게 줄일 수 있습니다.
참고: 최신 버전의 TensorFlow에서는 experimental 경로 없이 tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom 형태로 바로 사용할 수 있습니다.