꽃(flower) 데이터셋은 Keras의 전처리(preprocessing) API를 활용해 손쉽게 사전 처리할 수 있습니다. 특히 image_dataset_from_directory 메서드는 검증 세트(validation set) 분할 방식, 데이터가 저장된 디렉터리 경로 등 다양한 매개변수를 받아 데이터셋을 효율적으로 가공합니다.
핵심 개념 정리
이 글에서는 TensorFlow와 Keras가 어떻게 함께 작동하여 신경망을 구축하는지에 대한 기본 지식이 있다고 가정합니다. 우리는 Keras Sequential API를 사용합니다. Sequential API는 각 레이어가 정확히 하나의 입력 텐서와 하나의 출력 텐서를 갖는 순차적 모델을 만들 때 매우 유용합니다.
즉, keras.Sequential 모델로 이미지 분류기(image classifier)를 생성하고, 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을 기반으로 구축되었습니다.
코드 예제
print("Pre-processing the dataset using keras.preprocessing")
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)
class_names = train_ds.class_names
print("The class names are:")
print(class_names)코드 출처: https://www.tensorflow.org/tutorials/images/classification
실행 결과
Pre-processing the dataset using keras.preprocessing Found 3670 files belonging to 5 classes. Using 734 files for validation. The class names are: ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']
코드 설명
keras.preprocessing메서드를 사용하여 데이터셋을 사전 처리합니다. 위 예제에서는 전체 데이터의 20%를 검증용으로 분리했습니다.- 다음 단계는
class_names속성을 통해 클래스 이름 목록을 가져온 뒤, 콘솔에 출력하는 것입니다.
이처럼 image_dataset_from_directory를 활용하면 디렉터리 구조만 잘 정리되어 있어도 몇 줄의 코드로 학습용·검증용 데이터셋을 손쉽게 구성할 수 있으며, 이미지 크기 조정과 배치 처리까지 한 번에 처리할 수 있습니다.