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

TensorFlow로 꽃 데이터셋 성능 최적화하기: tf.data API 활용 가이드

꽃 데이터셋으로 모델을 학습시키면 기본적인 수준의 정확도를 얻을 수 있습니다. 하지만 모델의 성능을 한층 더 끌어올리고 싶다면 데이터 파이프라인 자체를 최적화해야 합니다. 이를 위해 캐싱(cache), 셔플(shuffle), 배칭(batch), 프리페치(prefetch)를 순서대로 수행하는 함수를 정의하고, 이를 훈련 및 검증 데이터셋에 적용하면 됩니다.

꽃 데이터셋 소개

이 튜토리얼에서는 수천 장의 꽃 이미지가 담긴 꽃 데이터셋을 사용합니다. 데이터셋은 총 5개의 하위 디렉터리로 구성되어 있으며, 각 하위 디렉터리는 하나의 클래스(꽃 종류)에 해당합니다.

Google Colaboratory 실행 환경

본문의 코드는 Google Colaboratory(이하 Colab)에서 실행됩니다. Colab은 브라우저에서 바로 Python 코드를 작성하고 실행할 수 있게 해주며, 별도의 설정 없이 GPU(그래픽 처리 장치)를 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어진 서비스입니다.

성능 최적화 함수 구현하기

아래 코드는 데이터셋을 성능에 맞게 구성하는 configure_for_performance 함수를 정의하고, 훈련 데이터셋과 검증 데이터셋에 각각 적용하는 과정을 보여줍니다.

print("성능을 위해 데이터셋을 구성하는 함수를 정의합니다")
def configure_for_performance(ds):
    ds = ds.cache()
    ds = ds.shuffle(buffer_size=1000)
    ds = ds.batch(batch_size)
    ds = ds.prefetch(buffer_size=AUTOTUNE)
    return ds

print("훈련 데이터셋에 함수를 적용합니다")
train_ds = configure_for_performance(train_ds)
print("검증 데이터셋에 함수를 적용합니다")
val_ds = configure_for_performance(val_ds)

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

출력 결과

성능을 위해 데이터셋을 구성하는 함수를 정의합니다
훈련 데이터셋에 함수를 적용합니다
검증 데이터셋에 함수를 적용합니다

코드 설명

  • 모델을 학습시키려면 먼저 데이터셋을 효율적으로 준비해야 합니다.
  • 데이터는 먼저 shuffle()로 무작위로 섞인 후, batch()를 통해 배치 단위로 묶이고, 이후 prefetch()가 다음 배치를 백그라운드에서 미리 준비해 GPU의 유휴 시간을 최소화합니다.
  • cache()는 첫 번째 에포크 이후 데이터를 메모리에 저장해 반복 읽기 속도를 크게 향상시킵니다.
  • AUTOTUNE 값을 사용하면 TensorFlow가 실행 환경에 맞춰 최적의 버퍼 크기를 동적으로 결정합니다.
  • 이러한 데이터 파이프라인 최적화 기능은 모두 'tf.data' API를 통해 제공됩니다.