신경망 모델을 학습시킬 때 입력 데이터의 표준화는 매우 중요한 전처리 단계입니다. 이 글에서는 TensorFlow를 사용해 이미지 데이터를 [0, 1] 범위로 표준화하는 방법을 소개합니다.
데이터셋 준비
여기서는 수천 장의 꽃 이미지를 포함하는 꽃 데이터셋(flower dataset)을 사용합니다. 이 데이터셋은 클래스별로 하나씩 총 5개의 하위 디렉터리로 구성되어 있습니다. 'get_file' 메서드를 통해 꽃 데이터셋을 다운로드한 후, 환경에 로드하여 작업을 진행할 수 있습니다.
Rescaling 레이어로 데이터 표준화하기
꽃 데이터는 모델에 정규화(normalization) 레이어를 추가함으로써 표준화할 수 있습니다. TensorFlow Keras에서 제공하는 이 레이어를 'Rescaling' 레이어라고 하며, 'map' 메서드를 사용해 전체 데이터셋에 일괄 적용할 수 있습니다.
아래 코드는 Google Colaboratory에서 실행되었습니다. Google Colab은 브라우저에서 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)를 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
print("정규화 레이어를 생성합니다")
normalization_layer = layers.experimental.preprocessing.Rescaling(1./255)
print("map 함수를 사용하여 레이어를 데이터셋에 적용합니다")
normalized_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch = next(iter(normalized_ds))
first_image = image_batch[0]
print(np.min(first_image), np.max(first_image))코드 출처: https://www.tensorflow.org/tutorials/images/classification
실행 결과
정규화 레이어를 생성합니다 map 함수를 사용하여 레이어를 데이터셋에 적용합니다 0.0 1.0
코드 설명
- RGB 채널 값은 기본적으로 [0, 255] 범위에 있습니다.
- 이렇게 큰 값은 신경망 학습에 적합하지 않습니다.
- 일반적으로 신경망의 입력 값은 가능한 한 작은 것이 좋습니다.
- 따라서 값을 [0, 1] 범위로 표준화하는 것이 권장됩니다.
- 이를 위해 Rescaling 레이어를 사용하며, 여기서는 픽셀 값을 255로 나누어 정규화했습니다.
- 'map' 함수를 호출하여 해당 레이어를 데이터셋 전체에 적용할 수 있습니다.
- 또 다른 방법으로는 레이어를 모델 정의 내부에 직접 포함시키는 것이 있습니다.
- 모델 내부에 포함하면 배포(deployment) 과정이 더욱 간소화된다는 장점이 있습니다.
마무리
이처럼 TensorFlow의 Rescaling 레이어를 활용하면 몇 줄의 코드만으로 이미지 데이터를 손쉽게 표준화할 수 있습니다. 데이터 표준화는 모델의 학습 안정성과 성능을 높이는 데 필수적인 과정이므로, 이미지 분류 프로젝트를 진행할 때 반드시 고려해야 합니다.