본문 바로가기

Deep Learning

Deep Learning : 파일을, training 과 test 디렉토리로 나눠서 저장하는 방법(디렉토리를 따로 만들어서 학습데이터 저장: mkdir, listdir)

 

- 파일을, training 과 test 디렉토리로 나눠서 저장하는 방법

training set은 이름 그대로 이 데이터는 모델을 학습시키기 위해서만 사용한다. 이렇게 학습이 완료되었다면 그 시점에서 test set을 도입하는데, 이 데이터는 모델의 입장에서 지금껏 한 번도 본 적이 없는 데이터이다. 이 데이터를 통해 모델이 예측한 값을 평가함으로써 공정한 평가가 가능하다는 것이다. test set은 비밀 데이터처럼 숨겨두었다가 학습이 끝난 다음에, 모델을 테스트하기 위해서만 사용한다.


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

1. os.mkdir 사용하여 사진을 저장할 디렉토리를 만든다.

2. 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)