# 압축해제
with zipfile.ZipFile(file_path) as zip:
zip.extractall(path)
zip.extractall
은 압축된 모든 파일을 해당 경로에 압축한다.zip.extract
를 통해 압축파일 내에서 원하는 파일만 압축을 해제할수도 있다.os.getcwd()
: 현재 디렉토리의 경로를 반환한다.os.mkdir(path)
: 지정한 경로에 폴더를 만든다.os.rmdir(path)
: 지정한 디렉토리를 삭제한다. 만약 디렉토리 안에 하나라도 파일이 있을 경우 에러가 발생한다.os.remove(path)
: 지정한 경로의 파일을 삭제한다.os.listdir(path)
: 지정한 경로에있는 모든 파일과 디렉토리 이름을 리스트에 담아 반환한다.os.rename(src, dst)
: src 파일이나 폴더의 이름을 dst로 변경한다.-shutil.copytree(src, dst)
: src 디렉토리 전체를 복사하여 dst에 붙여넣는다. dirs_exist_ok=True
를 설정하면, dst 경로에 폴더가 이미 있어도 무시하고 붙여넣게 된다.
shutil.rmtree(path)
: 해당 경로의 디렉토리를 삭제한다. os의 redir과 다른 점은, 해당 디렉토리에 파일이 있어도 무시하고 한꺼번에 삭제한다는 것이다.random.seed(int)
: 난수 생성기를 초기화하는 함수이다. 같은 seed에서는 항상 같은 결과가 나오기 때문에, 랜덤 샘플링에서 경우의 수를 고정하고 여러가지 방법을 비교해볼 때 사용할 수 있다. 매개변수를 선언하지 않으면 컴퓨터의 현재 시각이 seed가 된다.random.sample(population, k)
: population에서 k개를 무작위로 뽑아 리스트에 담아 반환한다.# 전체 데이터에서 10%를 뽑아 테스트 데이터 폴더(dst)에 옮기기
test_data_num = round(len(os.listdir(data_path))*0.1)
random.seed(2023)
files = os.listdir(data_path)
test_files = random.sample(files, test_data_num)
for file in test_files:
shutil.move(src=src+file, dst=dst+file)
tensorflow에서 더이상 사용을 권장하지 않는 모듈이다.
image.load_image()
: 불러온 파일을 PIL 인스턴스로 변환하는 함수이다.plt.imshow()
를 통해 표시하거나, 다른 함수를 이용하여 변환 등이 가능하다. image.ImageDataGenerator
: Data Augmentation을 위한 기능을 제공한다.from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rotation_range = 20,
zoom_range = [0.7, 1.3],
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
horizontal_flip=True,
fill_mode='nearest',
rescale=255
)
valid_datagen = ImageDataGenerator(
rotation_range = 20,
zoom_range = [0.7, 1.3],
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
horizontal_flip=True,
fill_mode='nearest',
rescale=255
)
train_generator = train_datagen.flow_from_directory(
train_path,
target_size=(280, 280),
class_mode='binary'
)
valid_generator = train_datagen.flow_from_directory(
val_path,
target_size=(280, 280),
class_mode='binary'
)
model.fit(train_generator,
epochs=1000,
verbose=1,
validation_data=valid_generator,
callbacks=[es])
from tensorflow.keras.preprocessing import image
from tensorflow.keras.utils import img_to_array
img = image.load_img(file, target_size=(img_size, img_size))
array = img_to_array(img)
이런 미니프로젝트를 할 때마다, 중간에 꼬이고 코드가 난잡해지는 일이 잦았다.
그러나 이번엔 반복되는 것들은 전부 함수나 변수로 선언하면서 비교적 깔끔한 코드를 작성하였고, 덕분에 중간에 꼬이더라도 쉽게 돌아갈 수 있었다.
2일차 진도는 모델링 과정인데, 아마 시간이 매우 부족할 것으로 생각한다. 그러나 전처리에서 해메지 않고 빠르게 끝낸 덕분에 모델링 과정을 미리 진행할 수 있었다.
PIL 객체 이해, PIL 객체를 통한 이미지 처리 방법
split_folders 라이브러리 사용해보기 (코드 한줄로 train, val, test를 나눌 수 있다)