티스토리 뷰

반응형
반응형

데이터셋 생성하기

케라스에서는 이미지 파일을 쉽게 학습시킬 수 있는 ImageDataGenerator 클래스를 설명한다.

이 클래스는 특정 폴더에 이미지를 분류하고 폴더내 이미지들을 학습시키기 위한 입력 데이터셋으로 만들어주는 기능을 설명한다.

 

먼저 ImageDataGenerator 클래스를 이용하여 객체를 생성하고, flow_from_directory() 함수를 이용하여 학습데이터를 생성합니다. 

 

flow_from_directory() 함수의 주요 인자는 아래와 같습니다.

  • 첫 번째 인자(directory) : 이미지 경로를 지정합니다.
  • target_size : 이미지 크기를 지정합니다. 폴더에 있는 원본 이미지 크기가 다르더라도 targer_size에 지정된 크기로 자동 조절됩니다.
  • batch_size : 배치 크기를 지정합니다.
  • class_mode : 분류 방식에 대해서 지정합니다.
    • categorical: 2D one-hot 부호화된 라벨이 반환됩니더.
    • binary : 1D 이진 라벨이 반환됩니다.
    • sparse : 1D 정수 라벨이 반환됩니다.
    • None : 라벨이 반환되지 않습니다.

 

예를 들어 학습데이터의 폴더 구조가 다음 그림과 같고 현재 폴더가 python_work일때 이미지는 경로는 data/handwriting_shape이고

이미지 크기는 24 x 24이기 때문에  target_size도 (24, 24)로 설정한다.

학습 데이터 수가 클래스 당 15개이니 배치 크기를 3으로 지정하여 총 5번 배치를 수행하면 하나의 epoch가 수행될 수 있다.

세 개의 라벨 값을 가지는 다중 클래스 문제이므로 class_mode는 ‘categorical’로 지정한다.

학습데이터와 검증데이터 폴더구조

 

# 필요한 패키지 불러오기 + 동일한 결과를 반복할 수 있도록 랜덤시드 지정
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator

# 랜덤 시드 고정시키기
np.random.seed(3)

train_datagen = ImageDataGenerator(rescale = 1./255)
train_generator = train_datagen.flow_from_directory(
				'C:/python_work/data/handwriting_shape/train',
				target_size = (24, 24),
				batch_size = 3,
				class_mode = 'categorical')

test_datagen = ImageDataGenerator(rescale = 1./255)
test_generator = test_datagen.flow_from_directory(
				'C:/python_work/data/handwriting_shape/test',
				target_size = (24, 24),
				batch_size = 3,
				class_mode = 'categorical')
반응형
댓글