본문 바로가기
C.W.K.
Stream
Lesson 06 of 07 · published

전처리 레이어

~9 min · layers

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

전처리를 별도 스크립트가 아니라 모델에 넣어

제품 머신러닝에서 흔한 문제 가운데 하나가 학습·서빙 불일치야. 학습할 때는 픽셀을 255로 나누고 텍스트를 소문자로 바꾸는데 서비스 코드가 한 단계를 빠뜨리면 모델은 다른 분포의 입력을 받게 돼. 전처리를 모델 그래프 안의 레이어로 만들면 모델을 저장할 때 함께 포함되어 두 구현을 따로 맞출 필요가 없어.

데이터 종류마다 알맞은 전처리 레이어가 있어

Rescaling(1./255)은 픽셀을 [0, 1]로 바꾸고 Normalization()은 특징을 평균 0, 분산 1에 가깝게 맞춰. TextVectorization은 문자열을 정수 시퀀스로 바꾸고 CategoryEncodingStringLookup은 범주·문자열을 모델이 읽는 텐서로 변환해. RandomFlipRandomRotation 같은 영상 증강도 같은 계열이야.

adapt()로 학습 데이터의 통계를 익혀

Rescaling은 계수가 고정되어 별도 준비가 필요 없지만 NormalizationTextVectorization은 데이터의 평균·분산이나 어휘를 먼저 배워야 해. layer.adapt(train_data)를 한 번 호출하면 필요한 통계를 만들고, 이후에는 일반 레이어처럼 동작하며 그 상태도 배포 환경에 함께 따라가.

Code

전처리 레이어 — 숫자, 텍스트, 범주·python
# Numeric preprocessing
layers.Rescaling(1.0/255)             # Normalize pixel values
layers.Normalization()                  # Standardize features (.adapt() first)

# Text preprocessing
layers.TextVectorization(
    max_tokens=10000,
    output_mode="int",
    output_sequence_length=200,
)

# Category encoding
layers.CategoryEncoding(num_tokens=10)
layers.StringLookup(vocabulary=["cat", "dog", "bird"])

External links

Exercise

첫 두 레이어가 Rescaling(1./255)와 RandomFlip('horizontal')인 CNN을 CIFAR-10으로 학습해. 저장 후 새 프로세스에서 불러와 [0,255] uint8 픽셀을 바로 predict()에 넣어 전처리가 자동 적용되는지 확인해.
Hint
RandomFlip은 학습할 때만 켜지지만 Rescaling은 학습과 추론 모두에서 동작해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.