반응형
# /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/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
## split_data 라는 파이썬 함수를 만든다.
# SOURCE directory
# TRAINING directory
# TESTING directory
# SPLIT SIZE
# 소스 경로에 있는 파일들을 잘 섞은 후
# 스플릿 사이즈만큼 학습용과 테스트용 파일로 분리한 후
# 트레이닝 디렉토리와 테스팅 디렉토리에 파일을 저장 시켜 주는 함수 작성 (파일 크기가 0보다 큰 파일만 저장)
# 힌트.
# os.listdir(DIRECTORY) gives you a listing of the contents of that directory
# os.path.getsize(PATH) gives you the size of the file
# copyfile(source, destination) copies a file from source to destination
# random.sample(list, len(list)) shuffles a list
def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
# YOUR CODE STARTS HERE
# 1. 원본 디렉토리에서 파일명을 모두 가져온다.
filename_lsit = os.listdir(SOURCE)
# 2. 잘 섞어준다.
shuffled_list = random.sample(filename_lsit, len(filename_lsit))
# 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)
# Expected output
# 666.jpg is zero length, so ignoring
# 11702.jpg is zero length, so ignoring
위 작업을 마쳣다면
modeling 후 ImageDataGenerator를 이용해 증강 후 학습시킨다.
반응형
'Deep Learning > Tensorflow' 카테고리의 다른 글
| Tensorflow - Transfer Learning (0) | 2022.06.16 |
|---|---|
| Tensorflow - numpy array로 되어있는 데이터를 증강하는 방법 (0) | 2022.06.16 |
| Tensorflow - ImageDataGenerator를 이용해서 데이터 증강하는 법 (0) | 2022.06.15 |
| Tensorflow - os.mkdir 이용하여, 파일 저장할 다음 디렉토리 만들기 (0) | 2022.06.15 |
| Tensorflow - Colab에 file upload해서 모델에 적용하는 함수 (0) | 2022.06.15 |