1. 데이터 파일
# /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()
2. 파일을 분리하고 저장할 디렉토리를 생성합니다.
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
3. 학습 데이터와 테스트 데이터 분리
- 학습 데이터: 90%, 테스트 데이터: 10% 분리
- 인덱스 및 SPLIT_SIZE 변수를 사용하여 데이터 비율 분리
- 데이터 파일 경로의 파일을 셔플(랜덤 데이터로 설정)
- 0이 아닌 크기의 파일을 training/test 폴더에 복사
- copyfile(소스 경로/파일 이름, 복사 경로/파일 이름)
- 변수 설명
- 소스: 데이터 파일 경로
- TRAINING: 교육 파일 경로
- TEST: 검증을 위한 데이터 파일의 경로
- 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)