본문 바로가기
딥러닝

[딥러닝] 디렉토리를 따로 만들어서 학습데이터 저장: mkdir, listdir

by eyoo 2022. 6. 15.

실무에서 CNN을 학습시킬때 학습할 데이터를 따로 복사해서 저장한다음 학습시킨다고 한다.

 

os.mkdir 사용하여 사진을 저장할 디렉토리를 만들자.

 

tmp에 cats-v-dogs폴더를 만들고 그 안에 training과 testing 폴더를 만든다 또 그 폴더들 안에 각각 cats와 dogs폴더를 만든다.

 

import os

try:
    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

 

 

데이터를 학습용과 벨리데이션용으로 분리하기위해 함수를 작성한다.

 

def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):

  # listdir함수로 원본 디렉토리에서 파일명을 모두 가져온다.
  filename_list = os.listdir(SOURCE)
  
  # random.sample 함수를 사용하여 섞어준다.
  suffled_list = random.sample(filename_list, len(filename_list))
  
  # 트레이닝과 테스팅으로 분리하기 위해서 인덱스를 잡는다.
  index = int(len(suffled_list) * SPLIT_SIZE)
  
  # 섞여있는 리스트에서 위의 인덱스로 학습용과 테스트용 파일을 분리한다.
  training = suffled_list[0 : index]
  testing = suffled_list[index :]
  
  # 각각의 분리된 파일을 반복문과 copyfile 함수를 사용하여 해당 디렉토리로 복사한다.
  for filename in training  :
    if os.path.getsize(SOURCE + filename) > 0 :
      copyfile(SOURCE + filename, TRAINING + filename)

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

 

 

함수를 사용하여 분리하여 저장했다.

 

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)

 

 

 

 

 

 

댓글