fit()이 부족할 때
가끔 model.fit()이 충분히 유연하지 않을 때 있어 — GAN은 generator/discriminator 교차 업데이트 필요, custom weighting의 multi-task loss, 연구용 gradient surgery. GradientTape로 custom training loop 짜면 완전한 제어 가능.
train_step은 항상 loop 밖에서 @tf.function으로 데코. 첫 호출에서 trace + 컴파일, 이후 호출은 컴파일된 거 직접 실행. 이게 custom loop이 fit() 속도와 같아지는 이유.
Keras metric은 누적. metric.result()는 마지막 reset_state() 이후 running 평균 반환. epoch 사이 reset 까먹으면 epoch 2 metric에 epoch 1 데이터 섞여서 숫자 이상해 보여. epoch 요약 후 항상 reset.