전처리를 별도 스크립트가 아니라 모델에 넣어
제품 머신러닝에서 흔한 문제 가운데 하나가 학습·서빙 불일치야. 학습할 때는 픽셀을 255로 나누고 텍스트를 소문자로 바꾸는데 서비스 코드가 한 단계를 빠뜨리면 모델은 다른 분포의 입력을 받게 돼. 전처리를 모델 그래프 안의 레이어로 만들면 모델을 저장할 때 함께 포함되어 두 구현을 따로 맞출 필요가 없어.
데이터 종류마다 알맞은 전처리 레이어가 있어
Rescaling(1./255)은 픽셀을 [0, 1]로 바꾸고 Normalization()은 특징을 평균 0, 분산 1에 가깝게 맞춰. TextVectorization은 문자열을 정수 시퀀스로 바꾸고 CategoryEncoding과 StringLookup은 범주·문자열을 모델이 읽는 텐서로 변환해. RandomFlip과 RandomRotation 같은 영상 증강도 같은 계열이야.
adapt()로 학습 데이터의 통계를 익혀
Rescaling은 계수가 고정되어 별도 준비가 필요 없지만 Normalization과 TextVectorization은 데이터의 평균·분산이나 어휘를 먼저 배워야 해. layer.adapt(train_data)를 한 번 호출하면 필요한 통계를 만들고, 이후에는 일반 레이어처럼 동작하며 그 상태도 배포 환경에 함께 따라가.