// The classifier captures the selected execution profile before fitting.
import aner.nn
import aner.ml
import aner.dataset
import aner.dev

print(nn.execution())
let split = dataset.iris().split(test: 0.2, seed: 2026)
let network = nn.sequential(seed: 42)
    .dense(inputs: 4, outputs: 16, initialization: "he").relu()
    .dense(inputs: 16, outputs: 3, initialization: "xavier")
let plan = ml.classifier(network, standardize: true,
    loss: "cross_entropy", optimizer: "adam")
print(plan.summary())
let fitted = plan.fit(split.train(), epochs: 20, rate: 0.02, progress: true)
let weights = fitted.weights(0)
print(weights.dtype())
print(weights.device())
print(weights.backend())
print(fitted.initial_loss())
print(fitted.training_loss())
print(fitted.evaluate(split.test()).accuracy())
dev.capture(label: "fitted weights", value: weights)
