마무리 실습 — 한 번은 모든 책임을 직접 져 보기
앞에서는 GAN을 train_step() 재정의로 깔끔하게 구현했어. 이번에는 같은 모델을 fit()도 train_step()도 없이 전체 수동 루프로 작성해. 목적은 fit()이 대신 맡던 책임의 무게를 몸으로 확인하는 거야. 에포크 반복, 그래디언트 기록 장치 두 개, 평가지표 출력, 체크포인트 로직을 직접 쓰면 높은 수준의 학습 API가 주는 가치가 코드 줄 수로 드러나.
수동 GAN 루프의 실제 동작
학습 원리는 같고 담당자만 바뀌어. 각 단계에서 실제 자료와 생성 자료를 섞은 배치로 판별자를 학습한 뒤, 생성자가 판별자를 속이도록 학습해. 두 신경망은 각자의 옵티마이저를 사용해. 아래 뼈대는 두 그래디언트 기록 장치가 만드는 핵심 갱신만 보여 줘. 실제 실행에서는 진행 상황 출력, 주기적인 표본 이미지 저장, 체크포인트까지 직접 둘러야 해. 모두 재정의 버전이 fit()에서 물려받던 기능이야.
- 판별자는 실제 자료와 생성 자료를 함께 학습해
- 생성자는 판별자를 속이는 방향으로 학습해
- 각 신경망은 별도의 옵티마이저를 사용해
- 두 손실을 모두 관찰해. 건강한 학습에서는 경쟁 속에서 값이 진동하며, 둘 중 하나가 0으로 무너지지 않아