이 문제를 풀다가 정리했던 포스트를 링크한다.
2019/10/16 - [Study/Deep Learning] - Keras - ImageDataGenerator
문제는 ImageDataGenerator를 사용하기 위해서 필요한 아래 코드의 A, B, C, D를 채우는 것이다.
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.(A)(
'warehouse/final_galaxy/train_galaxy', #파일 경로
(B), (C), (D))
val_datagen = ImageDataGenerator(rescale=1./255)
val_generator = val_datagen.(A)(
'warehouse/final_galaxy/val_galaxy', #파일 경로
(B), (C), (D))
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.(A)(
'warehouse/final_galaxy/test_galaxy', #파일 경로
(B), (C), (D))
일단 ImageDataGenerator는 이미지 데이터를 학습할 때 실시간으로 data augmentation을 할 수 있게 해주는 클래스이다.
data augmentation을 해야하는 이유는 뭘까?
딥러닝에서 관건은 데이터 수이다. 많은 데이터가 있을 수록 더 성능이 좋은 모델을 만들 수 있게 된다. 그러나 사람이 모을 수 있는 데이터 수는 한계가 있다. 그래서 가진 데이터를 여러 방법으로 변형(반전, 크롭, 밝기 조절 등)해서 데이터를 부풀려서 사용하는 것이다.
data augmentation을 하기 위해서 Keras에서는 ImageDataGenerator를 사용하는 것이다.
일단 예제 코드를 보니 파일 경로를 사용하고 있기 때문에
(A)는 flow_from_directory 이다.
flow_from_directory는 directory path로부터 dataframe을 가져와서 augmented나 normalized된 data의 batch를 생성한다.
(B)는 target size가 될 것이다. 딥러닝으로 은하 분류하기 문제에서 사용하는 데이터는 50x50 크기의 이미지이기 때문에 target_size=(50,50)이 되면 된다.
(C)는 batch_size이다. 배치 사이즈는 몇 개의 데이터를 가지고 한 번의 학습을 할 것인가를 정하는 것이다.
예를 들어, 3200개의 데이터가 있을 때 batch_size = 32 로 설정하면 32개의 data로 이뤄진 batch를 구성해서 총 100번을 돌아야 1번의 epoch이 진행되는 것이다.
batch size가 너무 크면 학습 시간은 줄어들겠지만 메모리에 많은 양의 데이터를 올리기 때문에 메모리 문제로 학습 진행이 안될 수도 있다.
(D)는 class_mode이다. class_mode로는 categorical(default), binary(sparse), raw(multi_output), input(None)가 있다.
이 예제에서는 다중 클래스 분류 문제이기 때문에 categorical을 사용하면 된다.
'DAFIT > 902 - 딥러닝으로 은하분류하기' 카테고리의 다른 글
<DAFIT> 02 딥러닝으로 은하 분류하기 06 - Validation, Evaluate (0) | 2019.10.29 |
---|---|
<DAFIT> 02 딥러닝으로 은하 분류하기 05 - Loss, Optimizer (0) | 2019.10.29 |
<DAFIT> 02 딥러닝으로 은하 분류하기 04 - Relu, Softmax (0) | 2019.10.29 |
<DAFIT> 02 딥러닝으로 은하 분류하기 03 - CNN (0) | 2019.10.29 |
<DAFIT> 02 딥러닝으로 은하 분류하기 01 - Import (0) | 2019.10.29 |