딥러닝
딥러닝(17) 원본파일을 트레인/테스트 파일로 분리하여 사용하는 방법
개발연습자1
2023. 1. 3. 12:58
이번 시간에는 이미지 원본 파일을 트레인/테스트 파일로 분리하여 사용하는 방법에 대해 알아본다.
우선 데이터를 구글 드라이브에 구글 코렙의 tmp경로로 넣어야 한다.
그런 다음 다운받은 파일의 압축을 푼다.
# Cats-v-dogs dataset 으로, 데이터를 분리하고, 이미지 증강을 활용하요, 인공지능 학습시킨다.
import os
import zipfile
import random
import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from shutil import copyfile
# /tmp 경로에 압축파일을 다운로드 받고 압축 푼다.
!wget --no-check-certificate \
"https://block-edu-test.s3.ap-northeast-2.amazonaws.com/kagglecatsanddogs_5340.zip" \
-O "/tmp/cats-and-dogs.zip"
local_zip = '/tmp/cats-and-dogs.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()
압축을 푼 파일에다가 디렉토리를 설정하여 새폴더만든 후 그 안에다가도 새폴더를 만든다.
# /tmp 디렉토리 안에다, 학습을 위한 데이터를 분류하기 위해
# cats-v-dogs 디렉토리를 만들고,
# 그 아래 training 과 testing 디렉토리 만든 후
# 각각 디렉토리 안에 cats 와 dogs 디렉토리를 만든다.
try:
#YOUR CODE GOES HERE
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/dogs')
os.mkdir('/tmp/cats-v-dogs/training/cats')
os.mkdir('/tmp/cats-v-dogs/testing/dogs')
os.mkdir('/tmp/cats-v-dogs/testing/cats')
except OSError:
pass
받은 파일을 인덱스와 파일이름과 상관없이 잘 섞어 준다.
file_names = os.listdir('/tmp/PetImages/Cat/')
shuffled_files=random.sample(file_names,len(file_names))
index=int(len(shuffled_files)*0.9)
triaing_images=shuffled_files[0:index]
test_images=shuffled_files[index:]
copyfile()
파일을 split size을 설정하여 설정한 값으로 training,testing 데이터로 나눠준다. 나눈 데이터는 아까 설정한 디렉토리로 나뉘어져서 복사되어 저장된다.
from tensorflow.python import train
def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
# YOUR CODE STARTS HERE
#원본 경로의 파일명들을 모두 가져온다.
file_names = os.listdir(SOURCE)
#가져온 파일명을 잘 섞어준다.
shuffled_files=random.sample(file_names,len(file_names))
#학습용과 테스트용 분리를 위해 인덱스를 구한다.
index = int( len(shuffled_files) * SPLIT_SIZE )
#섞인 파일명 리스트에서, 해당 인덱스만큼 잘라서, 학습용과 테스트용 파일명 분리
triaining_images=shuffled_files[0:index]
test_images=shuffled_files[index:]
#학습용과 테스트용으로 각각 해당 파일 폴더로, 파일을 카피한다.
for file_names in triaining_images:
if os.path.getsize(SOURCE+file_names)>0:
copyfile(SOURCE+file_names,TRAINING+file_names)
for file_name in test_images:
if os.path.getsize(SOURCE+file_names)>0:
copyfile(SOURCE+file_names,TESTING+file_names)
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)
반응형