반응형
해당 포스팅은 구글 코랩(Colab)을 기준으로 작성하였습니다.
데이터 파일
- 데이터 파일 다운로드 후 압축해제
# /tmp 경로에 압축파일을 다운로드 받고 압축 푼다.
!wget --no-check-certificate \
"https://block-edu-test.s3.ap-northeast-2.amazonaws.com/kagglecatsanddogs_5340.zip" \
-O "/tmp/cats-and-dogs.zip"
import zipfile
local_zip = '/tmp/cats-and-dogs.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()
파일을 분리하고 저장 할 디렉토리 생성
- training 폴더
- testing 폴더
- 각각의 분류가 되는 세부 폴더
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
Train/Test 데이터 분리
- Training 데이터 : 90% / Testing 데이터 : 10% 로 분리
- index와 SPLIT_SIZE 변수를 활용하여 데이터의 퍼센테이지대로 분리
- 데이터 파일의 경로에 있는 파일들을 셔플 (랜덤한 데이터가 오도록 설정)
- random.sample 함수 사용
- 파일의 크기가 0이 아닌 파일들을 training/testing 폴더로 복사
- copyfile( 원본경로/파일이름, 복사할경로/파일이름)
- 변수 설명
- SOURCE : 데이터 파일의 경로
- TRAINING : 학습용 데이터 파일의 경로
- TESTING : 검증용 데이터 파일의 경로
- SPLIT_SIZE : 데이터를 분리 할 수치 (90%로 설정)
import os
import random
from shutil import copyfile
def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
filename_list = os.listdir(SOURCE)
shuffled_list = random.sample(filename_list, len(filename_list))
index = int(len(shuffled_list) * SPLIT_SIZE)
training = shuffled_list[ : index ]
testing = shuffled_list [ index : ]
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)
반응형