Deep Learning

원본파일을 Train / Test 파일로 분리하여 사용하는 방법

yugyeong 2022. 12. 30. 17:43

cats 과 dogs 사진을 새로운 디렉토리 생성하여서 분리하기

 

원본 파일을 train / test 파일로 분리하는 방법이다.

 

1. copy 파일을 저장할 디렉토리를 생성한다

os.mkdir 을 이용하면, 원하는 위치에 원하는 디렉토리명 생성 할 수 있다.

 

/tmp 디렉토리 안에, 데이터를 분류하기 위해서, cats-v-dogs 디렉토리 만들고

그 라이래에 training 과 testing 디렉토리를 만든 후,

각각 디렉토리 안에 cats 와 dogs 디렉토리를 만들 것 이다.

 

- 디렉토리 -

cats-v-dogs

  • training 
    • cats
    • dogs
  • testing
    • cats
    • dogs

 

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

 

2. 파일을 Train / Test 용으로 분리하여서 저장하는 함수 작성

 

함수 split_data 를 생성하여서, 소스 경로에 있는 파일들을 잘 섞은 후,

split_size 만큼 학습용과 테스트용 파일로 분리하고,

training 디렉토리와 testing 디렉토리의 파일을 저장 시켜주는 함수를 작성하도록 하였다. (파일 크기가 0보다 큰 파일만 저장)

 

def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
# YOUR CODE STARTS HERE
  # 원본 경로의 파일명들을 모두 가져온다.
  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 :]


  # 학습용과 테스트용으로 각각 해당 폴더로 파일을 카피한다.
  for file_name in training_images :
    if os.path.getsize( SOURCE + file_name ) > 0 : # /tmp/Petimages/Cst/sjei.jpg
      copyfile( SOURCE + file_name, TRAINING + file_name )

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