실무에서 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)
'딥러닝' 카테고리의 다른 글
| [딥러닝] Transfer Learning과 Fine Tuning: MobileNetV2 ★ (0) | 2022.06.16 |
|---|---|
| [딥러닝] 이미지 증강(Augmentation): 이미지 , 넘파이 어레이 (0) | 2022.06.15 |
| [딥러닝] horse-or-human CNN 실습, 압축, 이미지 처리: extractall, ImageDataGenerator, flow_from_directory (0) | 2022.06.15 |
| [딥러닝] 분류 CNN: Conv2D, MaxPooling2D, Base, Head (0) | 2022.06.14 |
| [딥러닝] CNN (Convolutional Neural Network) 이해 (0) | 2022.06.14 |
댓글