CNN 개_고양이_이진분류 실습(데이터 만들기)
2024. 7. 8. 16:54ㆍDeep Learning
✅ 목표 설정
- 코드에서 압축 파일 다루는 법을 알아 보자.
- 정답이 없는 이미지 파일의 정답을 추가해 보자.
- NPZ 파일을 만들어 보자.
# 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')
# 드라이브 위치 확인
!pwd
# 드라이브 위치 변경
%cd /content/drive/MyDrive/Colab Notebooks/Deep Learning
# 필요한 라이브러리 가져오기
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 압축된 파일을 가져와서 압축을 풀어주자
from zipfile import ZipFile
zip_file = 'data/cats_and_dogs_filtered.zip' # 압축 파일 경로 잡아주기
with ZipFile(zip_file, 'r') as z :
z.extractall(path = 'data/')
# extractall() : 전체 파일 압축 해제
# path : 압축을 해제하는 경로 설정
✅ 이미지 파일을 NPZ 파일로 변화 시켜 주자
NPZ 파일로 바꿔주는 이유
- 데이터가 복잡하고 양이 많다면 클라우드 환경(구글 코랩 / 구글 드라이브) 데이터를 업로드 하는데 매우 오랜 시간이 걸린다.
- 볼륨이 큰 이미지 데이터를 로컬 환경(파이참 / 주피터 노트북)에서 빠르게 전처리 해주고 결과를 NPZ(numpy zip) 파일로 저장해서 빠르게 업로드 및 사용할 수 있도록 만들어줄 필요가 있다.
- NPZ 파일을 가지고 원하는 환경에 편하게 가지고 가서 데이터를 활용할 수 있다.
# os 라이브러리 / Image 라이브러리 호출
import os
from PIL import Image
# 이미지 접근을 위한 경로 설정
# 기본 경로 설정
base_dir = 'data/cats_and_dogs_filtered'
# os.path.join() : 파일의 경로 결함
train_dir_cats = os.path.join(base_dir, 'train/cats')
train_dir_dogs = os.path.join(base_dir, 'train/dogs')
test_dir_cats = os.path.join(base_dir, 'test/cats')
test_dir_dogs = os.path.join(base_dir, 'test/dogs')
train_dir_dogs
# os.listdir() : 해당 경로에 있는 파일 명들을 리스트에 순서대로 저장
train_cats_fname = os.listdir(train_dir_cats)
train_dogs_fname = os.listdir(train_dir_dogs)
test_cats_fname = os.listdir(test_dir_cats)
test_dogs_fname = os.listdir(test_dir_dogs)
train_cats_fname
# 파일 이름과 경로 결합 테스트
test_path = os.path.join(train_dir_cats, train_cats_fname[0])
test_path
# 이미지 사이즈 조정 및 배열로 변환
img_shape = (224, 224)
img = Image.open(test_path).resize(img_shape)
np.array(img)
# 사진을 불러와서 배열로 변경하는 함수를 만들어 보자!
def load_img(folder_path, file_name, img_size_shape = (224, 224)) :
imgs = []
for i in file_name :
# 폴더 경로 + 파일명
path = os.path.join(folder_path, i)
# 파일 오픈 후 크기 조정
img = Image.open(path).resize(img_size_shape)
# 넘파이 배열 변환
np_img = np.array(img)
# 리스트에 저장
imgs.append(np_img)
return np.array(imgs)
# 변수 설정 후 파일을 저장하고 형태를 파악해 보자
X_train_cats = load_img(train_dir_cats, train_cats_fname)
X_train_dogs = load_img(train_dir_dogs, train_dogs_fname)
X_test_cats = load_img(test_dir_cats, test_cats_fname)
X_test_dogs = load_img(test_dir_dogs, test_dogs_fname)
X_train_cats.shape, X_train_dogs.shape, X_test_cats.shape, X_test_dogs.shape
# 현재 훈련 데이터 / 평가 데이터는 분리 되어 있는 상태이다
# 하나로 합쳐서 온전한 훈련용 문제 데이터, 평가용 문제 데이터로 만들어 주자
X_train = np.concatenate([X_train_cats, X_train_dogs]) # 1000 + 1000 = 2000
X_test = np.concatenate((X_test_cats, X_test_dogs)) # 500 + 500 = 1000
# 결과 : 4차원 (이미지 데이터의 갯수, x축, y축, 색상의 채널 갯수)
X_train.shape, X_test.shape
# 현재 데이터의 문제점
# 딥러닝의 학습 분류 : 분류(지도 학습) -> 문제 + 정답
# 현재 문제 데이터 : X_train, X_test
# 현재 정답 데이터 : ????
# 정답 데이터를 만들어줘야 한다!
# 고양이 -> 0 / 개 -> 1
y_train = np.array([0] * 1000 + [1] * 1000)
y_test = np.array([0] * 500 + [1] * 500)
y_train.shape, y_test.shape
# npz 파일 만들어 보기
np.savez_compressed('data/cats_and_dogs_data.npz', # 폴더의 경로, 파일명(확장자가 포함) 설정
X_train = X_train, # 훈련용 문제 데이터
X_test = X_test, # 평가용 문제 데이터
y_train = y_train, # 훈련용 정답 데이터
y_test = y_test) # 평가용 정답 데이터
'Deep Learning' 카테고리의 다른 글
Yolo7 기반 객체 탐지 및 인식 (0) | 2024.07.10 |
---|---|
CNN_개_고양이_이진분류실습(모델링) (0) | 2024.07.09 |
CNN(Convolutional Neural Network) (0) | 2024.07.05 |
모델저장 학습중단 과적합 (0) | 2024.07.01 |
mlp_활성화 함수, 최적화 함수 비교 패션 데이터 다중 분류 (0) | 2024.06.28 |