AI/Framework

[Tensorflow/keras] Tensorflow용 DataLoader 만들기

Linuxias 2024. 4. 28. 18:31
반응형

딥러닝 모델을 훈련시키기 위해서는 종종 대규모 데이터셋이 필요합니다. 그러나 모든 데이터를 메모리에 로드하고 유지하는 것은 실용적이지 않을 수 있습니다. 이런 경우에는 데이터를 실시간으로 생성하여 모델에 제공할 수 있는 데이터 생성기를 사용하는 것이 좋습니다.

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 메서드에 구현해야 합니다.

Reference

keras-how-to-generate-data-on-the-fly

반응형