꽃(flower) 데이터셋은 Keras 전처리(preprocessing) API가 제공하는 image_dataset_from_directory 유틸리티를 활용하면 학습(training) 세트와 검증(validation) 세트로 간편하게 분할할 수 있습니다. 이 유틸리티는 검증 세트에 할당할 비율만 지정해 주면 나머지 분할 작업을 자동으로 처리해 줍니다.
데이터 로딩 및 모델 구성 개요
이미지 분류기는 keras.Sequential 모델을 기반으로 생성되며, 데이터는 preprocessing.image_dataset_from_directory를 통해 디스크에서 효율적으로 불러옵니다. 이 과정에서 과적합(overfitting) 여부를 확인하고, 이를 완화하기 위한 기법들을 적용합니다. 대표적인 기법으로는 데이터 증강(data augmentation)과 드롭아웃(dropout)이 있습니다.
사용된 데이터셋에는 약 3,700장의 꽃 이미지가 포함되어 있으며, 총 5개의 하위 디렉터리로 구성되어 있습니다. 각 하위 디렉터리는 하나의 클래스에 해당하며, 클래스는 다음과 같습니다.
- daisy (데이지)
- dandelion (민들레)
- roses (장미)
- sunflowers (해바라기)
- tulips (튤립)
실행 환경: Google Colaboratory
아래 코드는 Google Colaboratory(Colab)에서 실행합니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 환경으로, 별도의 설정이 필요 없으며 GPU(그래픽 처리 장치)도 무료로 사용할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
코드 예제
batch_size = 32
img_height = 180
img_width = 180
print("데이터를 학습 세트와 검증 세트로 분할합니다")
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)코드 출처: https://www.tensorflow.org/tutorials/images/classification
출력 결과
데이터를 학습 세트와 검증 세트로 분할합니다 5개 클래스에 속하는 3670개의 파일을 찾았습니다. 학습에 2936개의 파일을 사용합니다.
코드 설명
- 이미지는 image_dataset_from_directory 유틸리티를 사용하여 디스크에서 직접 불러옵니다.
- 이 유틸리티는 디스크상의 이미지 디렉터리를 tf.data.Dataset 형태로 변환해 줍니다.
- 데이터 다운로드가 완료되면, 데이터 로더(loader)에 사용할 여러 매개변수(배치 크기, 이미지 크기, 시드 등)를 정의합니다.
- validation_split=0.2 옵션을 통해 전체 데이터의 20%를 검증 세트로, 나머지 80%를 학습 세트로 분할합니다.
- seed 값을 고정하면 재현 가능한(reproducible) 분할 결과를 얻을 수 있습니다.