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

TensorFlow와 Keras Sequential API로 꽃 데이터셋 다운로드하는 방법

꽃(flower) 데이터셋은 Keras Sequential API를 통해 손쉽게 다운로드할 수 있습니다. 데이터셋이 저장되어 있는 구글 API의 URL을 get_file 메서드에 전달하면, 해당 데이터를 가져와 로컬 환경에 저장합니다.

컨볼루션 신경망(CNN)과 이미지 분류

최소 하나 이상의 컨볼루션 레이어(convolutional layer)를 포함하는 신경망을 컨볼루션 신경망(Convolutional Neural Network, CNN)이라고 합니다. CNN은 이미지 인식과 같은 특정 유형의 문제에서 탁월한 성능을 보여주며, 널리 활용되고 있습니다.

이미지 분류기는 keras.Sequential 모델을 사용해 생성하며, 데이터는 preprocessing.image_dataset_from_directory 함수를 통해 디스크에서 효율적으로 불러옵니다. 또한 과적합(overfitting) 문제를 식별하고, 이를 완화하기 위한 기법들을 적용할 수 있는데, 대표적인 방법으로는 데이터 증강(data augmentation)드롭아웃(dropout)이 있습니다.

꽃 데이터셋 소개

이번 예제에서 사용할 꽃 데이터셋에는 총 약 3,700장의 꽃 이미지가 포함되어 있으며, 5개의 하위 디렉터리로 구성되어 있습니다. 각 하위 디렉터리는 하나의 클래스(꽃 종류)에 해당하며, 다음과 같습니다.

  • 데이지(daisy)
  • 민들레(dandelion)
  • 장미(roses)
  • 해바라기(sunflowers)
  • 튤립(tulips)

Google Colaboratory 실행 환경

아래 코드는 Google Colaboratory(Colab)에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있도록 지원하며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)를 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

코드 예제

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import pathlib
print("필요한 패키지 임포트 완료")
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
print("데이터 다운로드 완료")

코드 출처: https://www.tensorflow.org/tutorials/images/classification

실행 결과

필요한 패키지 임포트 완료
Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz
228818944/228813984 [==============================] - 5s 0us/step
데이터 다운로드 완료

코드 설명

  • 먼저 matplotlib, numpy, PIL, TensorFlow 등 필요한 패키지들을 임포트합니다.
  • 구글 API에 저장된 URL을 origin 인자로 전달하고, untar 옵션을 True로 설정하여 압축 파일을 자동으로 해제합니다.
  • tf.keras.utils.get_file 메서드를 호출하면 데이터셋이 다운로드되어 로컬에 저장됩니다.