// Iris: Fisher (1936), UCI, CC BY 4.0. Native CPU Float64 training.
import aner.dataset
import aner.nn
import aner.ml
import aner.dev

print(nn.devices())
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: 8, initialization: "xavier")
    .tanh()
    .dense(inputs: 8, outputs: 3, initialization: "xavier")
let plan = ml.classifier(network, standardize: true,
                         loss: "cross_entropy", optimizer: "adam")
    .on(device: "cpu")
print(plan.summary())
let fitted = plan.fit(split.train(), epochs: 400, rate: 0.02, progress: true)
dev.capture("First Dense weights", fitted.weights(layer: 0))
print("Training seconds")
print(fitted.training_seconds())
print(fitted.evaluate(split.test()).summary())
print("Prediction device")
print(fitted.predict(split.test()).device())
