# os.listdir(DIRECTORY) 디렉토리에 있는 파일 리스팅
# os.path.getsize(PATH) 파일 사이즈 확인
# copyfile(source, destination) 원하는 디렉토리로 파일 복사
# random.sample(list, len(list)) 리스트를 섞는다.(파일명 섞기)
def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
# YOUR CODE STARTS HERE
# 1. 원본 디렉토리에서, 파일명을 모두 가져온다.
filename_list = os.listdir(SOURCE)
# 2. 잘 섞어준다.
shuffled_list = random.sample(filename_list, len(filename_list))
# 3. 트레이닝과 테스팅으로 분리하기 위해서 인덱스를 잡아준다.
index = int(len(shuffled_list) * SPLIT_SIZE)
# 4. 섞여있는 리스트에서, 위의 인덱스로, 학습용과 테스트용 파일을 분리한다.
training = shuffled_list[0:index]
testing = shuffled_list[index:]
# 5. 각각의 분리된 파일을, 해당 디렉토리로 복사해 준다.
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)
# YOUR CODE ENDS HERE
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)
먼저 파일들을 잘 섞은 후, 트레이닝은 90%, 테스트는 10%로 파일을 나눕니다. 그리고 파일의 사이즈가 0이 아니면,
그 파일을 트레이닝 또는 테스트 디렉토리에 실제로 저장을 합니다.
'인공지능 > 텐서플로우' 카테고리의 다른 글
Fine Tuning을 하기위한 코드와 설명 (0) | 2022.06.16 |
---|---|
Transfer Learning을 하기 위한 코드와 설명 (0) | 2022.06.16 |
ImageDataGenerator를 이용해서 데이터 증강 하는 방법 (0) | 2022.06.15 |
이미지 파일을, 학습데이터로 만드는 방법 (텐서플로우의 ImageDataGenerator) (0) | 2022.06.15 |
파이썬으로 압축파일 푸는 방법 (0) | 2022.06.15 |