이 글에서는 꽃 데이터셋(flower dataset)을 예로 들어 TensorFlow와 Python을 이용해 데이터를 시각화하는 과정을 살펴봅니다.
데이터셋 다운로드
꽃 데이터셋은 구글에서 제공하는 API 링크를 통해 다운로드할 수 있습니다. TensorFlow의 get_file 메서드에 해당 API 주소를 매개변수로 전달하면, 데이터가 자동으로 실행 환경에 내려받아집니다.
다운로드된 이미지는 matplotlib 라이브러리를 사용해 시각화할 수 있으며, imshow 메서드를 호출하면 콘솔(노트북) 화면에 이미지가 표시됩니다.
Keras Sequential API 소개
여기서는 Keras의 Sequential API를 사용합니다. Sequential API는 각 레이어가 정확히 하나의 입력 텐서와 하나의 출력 텐서를 가지는 순차적 모델을 손쉽게 구축할 수 있도록 도와주는 인터페이스입니다.
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을 기반으로 구축되었습니다.
print("Visualizing the dataset")
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 10))
for images, labels in train_ds.take(1):
for i in range(6):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8"))
plt.title(class_names[labels[i]])
plt.axis("off")
for image_batch, labels_batch in train_ds:
print(image_batch.shape)
print(labels_batch.shape)
break코드 출처: https://www.tensorflow.org/tutorials/images/classification
실행 결과
Visualizing the dataset (32, 180, 180, 3) (32,)

코드 설명
fit메서드로 모델 학습을 진행한 후에도, 데이터셋을 수동으로 반복(iterate)하여 이미지 배치(batch)를 가져올 수 있습니다.- 가져온 데이터는 콘솔에 출력되어 확인할 수 있습니다.
image_batch는 형태가 (32, 180, 180, 3)인 텐서입니다. 즉, 180x180x3 크기의 이미지 32장으로 이루어진 배치입니다.label_batch는 형태가 (32,)인 텐서로, 32장의 이미지에 해당하는 레이블 값을 담고 있습니다.image_batch와label_batch텐서에.numpy()를 호출하면 이를 numpy.ndarray로 변환할 수 있습니다.