본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/AI

'개와 고양이 분류' 실습 #1

by ToolBOX01 2026. 5. 14.
반응형

1. 런타임 유형 변경

런타임 유형 변경 메뉴 선택

구글의 GPU를 선택 합니다. 

하드웨어 가속기 선택


2. 데이터 불러오기 실행

import tensorflow as tf
from keras import layers, models
import matplotlib.pyplot as plt
import tensorflow_datasets as tfds

# 데이터셋 로드 (이미지 크기는 150x150으로 조정)
(train_data, test_data), info = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:]'],
    with_info=True,
    as_supervised=True
)

 

실행 결과 메세지를 설명 합니다

WARNING:absl:Variant folder /root/tensorflow_datasets/cats_vs_dogs/4.0.1 has no dataset_info.json
Downloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to /root/tensorflow_datasets/cats_vs_dogs/4.0.1...

위 내용은 오류가 아니라 아주 정상적인 진행 과정입니다. "여기 데이터가 없네? 내가 지금 인터넷에서 가져와서 준비해둘게. 잠시만 기다려줘!"라는 의미 입니다.

 

WARNING:absl:Variant folder /root/tensorflow_datasets/cats_vs_dogs/4.0.1 has no dataset_info.json

  • 의미: "데이터를 저장할 폴더를 확인해봤는데, 아직 데이터셋 정보 파일(dataset_info.json)이 없네?"라는 뜻입니다.
  • 왜 떴을까?: 이 코드를 처음 실행했기 때문입니다. 데이터가 아직 컴퓨터(Colab 서버)에 없으니 정보 파일도 없는 것이 당연합니다.
  • 걱정 마세요: 이 메시지 직후에 바로 다운로드를 시작하므로 무시하셔도 되는 경고입니다.

 

Downloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size)

  • 의미: "데이터셋이 얼마나 큰지(Size)는 아직 모르겠지만, 일단 다운로드해서 학습할 수 있는 상태로 준비(Preparing)할게!"라는 뜻입니다.
  • Unknown size라고 뜨는 이유: cats_vs_dogs 데이터셋은 외부 서버에서 가져오는 방식이라, TensorFlow가 전체 용량을 미리 계산하기 전에 일단 내려받기부터 시작하기 때문에 일시적으로 "알 수 없음"으로 표시되는 것입니다.

 

 to /root/tensorflow_datasets/cats_vs_dogs/4.0.1...

  • 의미: 다운로드한 데이터를 저장하는 경로입니다.
  • 앞으로 다시 코드를 실행할 때는 이 경로에 이미 데이터가 있으므로, 위와 같은 긴 다운로드 과정 없이 바로 데이터를 불러오게 됩니다.

 


이 메시지는 데이터 준비가 최종적으로 완료되었음을 알려주는 메시지입니다.

WARNING:absl:1738 images were corrupted and were skipped
Dataset cats_vs_dogs downloaded and prepared to /root/tensorflow_datasets/cats_vs_dogs/4.0.1. Subsequent calls will reuse this data.

 

WARNING:absl:1738 images were corrupted and were skipped

  • 의미: "가져온 이미지 중에서 1,738장이 손상되어 있어서 제외하고 나머지만 가져왔어."라는 뜻입니다.
  • 왜 이런 일이?: cats_vs_dogs 데이터셋은 예전에 MS 리서치에서 공개한 아주 유명한 데이터인데, 원본 데이터 자체에 깨진 이미지(이미지 형식이 잘못되었거나 파일이 손상된 것)가 섞여 있습니다.
  • 해결: TensorFlow Datasets가 똑똑하게도 학습 중에 에러가 나지 않도록 문제가 있는 사진들을 미리 걸러낸 것입니다. 약 2만 5천 장 중에서 1,738장을 뺀 나머지로도 학습하기에는 충분하니 전혀 걱정하실 필요 없습니다.

 

Dataset cats_vs_dogs downloaded and prepared to /root/tensorflow_datasets/cats_vs_dogs/4.0.1.

  • 의미: "개와 고양이 데이터셋을 다운로드해서 /root/... 경로에 학습하기 좋은 형태로 변환(Prepare)해 두었어."라는 뜻입니다.
  • 이제 원본 파일을 읽어오는 것이 아니라, TensorFlow가 가장 빠르게 읽을 수 있는 전용 포맷(TFRecord)으로 변환되어 저장된 상태입니다.

 

Subsequent calls will reuse this data.

  • 의미: "다음에 이 코드를 다시 실행할 때는 또 다운로드하지 않고, 이미 저장된 데이터를 바로 쓸게!"라는 뜻입니다.
  • 덕분에 다음번 실행부터는 tfds.load를 호출하자마자 몇 초 만에 바로 데이터가 로드됩니다.

 


3. 불러온 데이터 확인 하기

1) 데이터셋 정보 요약 보기 (info 객체 활용)

# 전체 이미지 개수와 라벨 종류 확인
print(f"전체 데이터 정보: {info.features}")
print(f"라벨 이름: {info.features['label'].names}") # ['cat', 'dog'] 출력
print(f"훈련 데이터 개수: {info.splits['train'].num_examples}")

전체 데이터 정보: FeaturesDict({ 'image': Image(shape=(None, None, 3), dtype=uint8), 'image/filename': Text(shape=(), dtype=string), 'label': ClassLabel(shape=(), dtype=int64, num_classes=2), })
라벨 이름: ['cat', 'dog']
훈련 데이터 개수: 23262

 

2) 실제 이미지와 라벨 시각화 (가장 추천)

# 훈련 데이터에서 5개만 가져와서 출력
plt.figure(figsize=(10, 10))
for i, (image, label) in enumerate(train_data.take(5)):
    ax = plt.subplot(1, 5, i + 1)
    plt.imshow(image)
    plt.title(info.features['label'].int2str(label)) # 숫자로 된 라벨을 문자열로 변환
    plt.axis("off")

 

 

3) 데이터 텐서 구조 확인

# 데이터 한 개를 추출해서 속성 확인
for image, label in train_data.take(1):
    print("이미지 형태(Height, Width, Channel):", image.shape)
    print("라벨 값:", label.numpy()) # 0(고양이) 또는 1(개)

 

이미지 형태(Height, Width, Channel): (262, 350, 3)
라벨 값: 1

 

by korealionkk@gmail.com


 

반응형