본문 바로가기
인공지능/Deep Learning

[Deep Learning] 원본 파일을 train / test 파일로 분리하기

by coding_su 2023. 1. 2.

📝원본 파일을 train / test 파일로 각각 분리하기

/tmp 디렉토리 안에 학습을 위한 데이터를 분류하기 위해 cats-v-dogs 디렉토리를 만들고
그 아래 training 과 testing 디렉토리 만든 후 각각 디렉토리 안에  cats와 dogs 디렉토리를 만든다

import os

try:
    #YOUR CODE GOES HERE
    os.mkdir('/tmp/cats-v-dogs')

    os.mkdir('/tmp/cats-v-dogs/training')
    os.mkdir('/tmp/cats-v-dogs/testing')

    os.mkdir('/tmp/cats-v-dogs/training/cats')
    os.mkdir('/tmp/cats-v-dogs/training/dogs')

    os.mkdir('/tmp/cats-v-dogs/testing/cats')
    os.mkdir('/tmp/cats-v-dogs/testing/dogs')
    
except OSError:
    pass

 

소스 경로에 있는 파일들을 잘 섞은 후 스플릿 사이즈만큼 학습용과 테스트용 파일로 분리한 후
트레이닝 디렉토리와 테스팅 디렉토리에 파일을 저장 시켜 주는 함수 작성 (파일 크기가 0보다 큰 파일만 저장)

def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE) :
  # 원본 경로의 파일명들을 모두 가져온다
  file_names = os.listdir(SOURCE)

  # 가져온 파일명을 잘 섞어준다
  shuffled_files = random.sample(file_names, len(file_names))

  # 학습용과 테스트용 분리를 위해 인덱스를 구한다
  index = int(len(shuffled_files) * SPLIT_SIZE)

  # 섞인 파일명 리스트에서 해당 인덱스만큼 잘라서 학습용과 테스트용 파일명 분리
  training_images = shuffled_files[0 : index]
  test_images = shuffled_files[index : ]

  # 학습용과 테스트용으로 각각 해당 폴더로 파일을 카피한다 (파일 크기가 0보다 큰 파일만 저장)
  for file_names in training_images :
    if os.path.getsize(SOURCE + file_names) > 0 : # /tmp/PetImages/Cat/이미지파일명.jpg
      # 원본경로, 카피할경로를 입력
      copyfile(SOURCE + file_names, TRAINING + file_names)

  for file_names in test_images :
    if os.path.getsize(SOURCE + file_names) > 0 :
      copyfile(SOURCE + file_names, TESTING + file_names)

 

경로를 변수에 저장하고 함수를 실행

CAT_SOURCE_DIR = "/tmp/PetImages/Cat/"
TRAINING_CATS_DIR = "/tmp/cats-v-dogs/training/cats/"
TESTING_CATS_DIR = "/tmp/cats-v-dogs/testing/cats/"
DOG_SOURCE_DIR = "/tmp/PetImages/Dog/"
TRAINING_DOGS_DIR = "/tmp/cats-v-dogs/training/dogs/"
TESTING_DOGS_DIR = "/tmp/cats-v-dogs/testing/dogs/"

split_size = .9
split_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)
split_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)

댓글