Keras 3 의 간판 트릭: env var 한 줄로 runtime 에 backend 골라. TensorFlow / PyTorch / JAX — model = keras.Sequential(...) 똑같고 .fit() 똑같아. 이 track 은 그 mental model, 흔한 gotcha (backend 섞으면 tensor 호환 안 됨), 그리고 backend-agnostic custom math 짜게 해주는 keras.ops namespace 를 가르친다.
'무엇' 과 '어떻게' 를 쪼갠다
Keras 3 의 핵심 통찰은 *model 묘사* 와 *실행* 을 분리한 거야. layer 정의하고 연결하고 학습 설정하는 건 무엇 을 계산할지 적는 일. 어떻게 계산할지는 backend 가 정해. 이 경계선 — 의도 vs 구현 — 이 한 model 파일이 세 engine 위에서 도는 이유 전부야.
소프트웨어에선 흔한 발상인데, 딥러닝에선 의외로 어려워. autodiff·device 배치·kernel 선택·graph 컴파일 다 engine 소유거든. 대부분의 'portable' framework 는 engine 을 다시 구현해서 흉내만 내. Keras 3 는 그게 아니라 모든 primitive op 을 *그때 로드된 engine* 으로 흘려보내.
dispatch layer
그 흘려보내기를 keras.ops 가 해. keras.ops.matmul 은 active backend 에 따라 jax.numpy.matmul / tf.matmul / torch.matmul 로 dispatch. 그리고 built-in layer·loss·metric·optimizer 가 전부 keras.ops 위에 짜여 있어서 portability 를 *공짜로* 물려받아 — 따로 켜는 게 아냐.
저장 파일이 engine 무관인 이유
KerasTensor 는 model 구성 단계에서 쓰는 backend-agnostic symbolic tensor. 어느 framework 에도 묶이지 않고 computation graph 만 묘사해. 그래서 .keras 파일엔 backend-specific op 이 하나도 안 들어가. 오늘 JAX 로 학습하고 내일 TensorFlow 쓰는 동료한테 파일 넘겨도 그냥 load 돼. 이게 다음 lesson 들이 딛고 서는 payoff 야.