Skip to content

server-train: no held-out tokens, no eval loss (null, not 0.0); report eval_trainable_tokens - #31

Merged
joelteply merged 1 commit into
feat/props-weight-residencyfrom
fix/train-no-held-out-no-eval-loss
Sep 28, 2026
Merged

joelteply merged 1 commit into
feat/props-weight-residencyfrom
fix/train-no-held-out-no-eval-loss

Conversation

@joelteply

Copy link
Copy Markdown

With val_split 0, or a split that rounds to no held-out windows, trainable_eval is 0. ggml-opt's empty eval result then gives loss 0.0, and the epoch reported eval_loss 0.0. The core read that as a held-out validation loss of zero (Codex, from source: server-train.cpp 689-709, ggml-opt.cpp 661).

  • An epoch's eval_loss is null when no held-out trainable token was evaluated.
  • The /train state carries eval_trainable_tokens, the count the eval loss is measured over, so a consumer can tell whether a held-out measurement exists at all.

The core side reads both (continuum PR to follow).

🤖 Generated with Claude Code

https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo

… eval_trainable_tokens reports the count

With val_split 0, or a split that rounds to no windows, trainable_eval is 0,
scale_eval is 0, and ggml-opt's empty eval result gives loss 0.0. The epoch then reported
eval_loss 0.0, and the core read that as a held-out validation loss of zero (Codex). Now
eval_loss is null when no held-out token was evaluated, and state carries
eval_trainable_tokens, so a consumer knows whether a held-out measurement exists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant