Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

TensorFlow를 활용해 Python으로 데이터셋을 시각화하는 방법

이 글에서는 꽃 데이터셋(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,)

TensorFlow를 활용해 Python으로 데이터셋을 시각화하는 방법

코드 설명

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