[Tensorflow/keras] Tensorflow용 DataLoader 만들기
딥러닝 모델을 훈련시키기 위해서는 종종 대규모 데이터셋이 필요합니다. 그러나 모든 데이터를 메모리에 로드하고 유지하는 것은 실용적이지 않을 수 있습니다. 이런 경우에는 데이터를 실시간으로 생성하여 모델에 제공할 수 있는 데이터 생성기를 사용하는 것이 좋습니다.
PyTorch의 DataLoader는 데이터셋을 미니 배치로 나누어 모델에 공급하는 역할을 합니다. 이는 데이터를 반복하고 전처리하는 작업을 추상화하여 사용자가 모델 학습에 집중할 수 있도록 합니다.
Keras에서 데이터 생성기를 사용하는 방법은 메모리에 맞지 않는 대규모 데이터셋을 효율적으로 처리하는 강력한 방법입니다. Keras는 사용자 정의 데이터 생성기를 만들기 위한 기반 클래스로 Sequence
클래스를 제공합니다.
단계 1: 사용자 정의 데이터 생성기 클래스 만들기
from keras.utils import Sequence
class CustomDataGenerator(Sequence):
def __init__(self, list_IDs, labels, batch_size=32, shuffle=True):
self.list_IDs = list_IDs
self.labels = labels
self.batch_size = batch_size
self.shuffle = shuffle
self.on_epoch_end()
def __len__(self):
return int(np.ceil(len(self.list_IDs) / self.batch_size))
def __getitem__(self, index):
indexes = self.indexes[index*self.batch_size:(index+1)*self.batch_size]
list_IDs_temp = [self.list_IDs[k] for k in indexes]
X, y = self.__data_generation(list_IDs_temp)
return X, y
def on_epoch_end(self):
self.indexes = np.arange(len(self.list_IDs))
if self.shuffle == True:
np.random.shuffle(self.indexes)
def __data_generation(self, list_IDs_temp):
# 데이터 로드 및 전처리를 여기에 구현합니다.
# 이 함수는 배치 데이터(X)와 해당 레이블(y)을 반환해야 합니다.
pass
단계 2: 데이터 로드 및 전처리 구현
사용자 정의 데이터 생성기 클래스의 __data_generation
메서드에서 각 배치에 대한 데이터 로드 및 전처리 로직을 구현하세요. 이는 이미지 파일 읽기, 변환 적용 또는 필요한 기타 전처리 단계를 포함할 수 있습니다.
단계 3: 사용자 정의 데이터 생성기의 인스턴스 생성
# 예시 사용법:
train_generator = CustomDataGenerator(train_IDs, train_labels)
validation_generator = CustomDataGenerator(validation_IDs, validation_labels)
단계 4: Keras 모델과 데이터 생성기 사용
이제 fit_generator
함수를 사용하여 데이터 생성기와 함께 Keras 모델을 학습할 수 있습니다:
model.fit_generator(generator=train_generator,
validation_data=validation_generator,
epochs=epochs)
이제 완료되었습니다! 당신은 Keras와 함께 사용자 정의 데이터 생성기를 성공적으로 구현하고 사용했습니다. 이 방법을 사용하면 모델 학습 중에 대용량 데이터셋을 효율적으로 처리할 수 있습니다. 특정 데이터셋과 작업에 맞는 데이터 로딩 및 전처리 로직을 CustomDataGenerator
클래스의 __data_generation
메서드에 구현해야 합니다.