C.W.K.
Stream
Lesson 03 of 06 · published

Full manual loop

~8 min · custom-train

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

loop 를 직접 소유할 때

full manual loop 는 두 번째 칸이야. fit() 한테 운전대를 안 맡기고 epoch / batch iteration 을 네가 직접 써. loop 구조에 대한 완전한 제어를 얻는 대신 — 평가를 끼워넣든, custom schedule 로 분기하든, batch 사이에 뭐든 돌릴 수 있어 — 상속받는 건 아무것도 없어. progress bar 없음, callback 없음, checkpoint 없음, distribution 없음. 모든 편의가 네가 짜야 할 한 줄이 돼.

뼈대

모양은 늘 같아: epoch 바깥 loop, dataset 안쪽 loop, 각 step 안에서 forward → loss → gradient → optimizer update. forward 와 loss 부분은 portable 인데 gradient step 은 backend-native — 아래 예시는 TensorFlow 의 tf.GradientTape. PyTorch 면 loss.backward(), JAX 면 jax.grad 로 변환해. 그 한 블록 때문에 '진짜 backend-agnostic loop' 같은 건 없는 거야.

Code

Manual training loop (TensorFlow backend)·python
import tensorflow as tf
import keras

optimizer = keras.optimizers.Adam(1e-3)
loss_fn = keras.losses.SparseCategoricalCrossentropy()

for epoch in range(10):
    for step, (x_batch, y_batch) in enumerate(train_dataset):
        with tf.GradientTape() as tape:
            # Forward pass with gradient tracking
            y_pred = model(x_batch, training=True)
            loss = loss_fn(y_batch, y_pred)

        # Compute gradients and update weights (TF-native)
        grads = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(
            zip(grads, model.trainable_variables)
        )

    print(f"Epoch {epoch}, Loss: {float(loss):.4f}")

External links

Exercise

MNIST 의 full manual training loop (fit 없이) 짜. validation pass + best-model 저장 포함. fit 기반 버전과 비교 — fit 이 공짜로 주던 거를 어디서 직접 구현했는지 메모.

Progress

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

댓글 0

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

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