# Define metrics metrics = nnx.MultiMetric( accuracy=nnx.metrics.Accuracy(), loss=nnx.metrics.Average('loss'), ) @nnx.jit def train_step_with_metrics(model, optimizer, metrics, batch): def loss_fn(model): logits = model(batch['image']) loss = optax.softmax_cross_entropy_with_integer_labels( logits=logits, labels=batch['label'] ).mean() return loss, logits (loss, logits), grads = nnx.value_and_grad(loss_fn, has_aux=True)(model) optimizer.update(model, grads) # Update metrics in place metrics.update(loss=loss, logits=logits, labels=batch['label']) # In training loop: for batch in train_ds: train_step_with_metrics(model, optimizer, metrics, batch) # Get aggregated metrics results = metrics.compute() print(f"Loss: {results['loss']:.4f}, Accuracy: {results['accuracy']:.4f}") # Reset for next epoch metrics.reset() __ __