// Iris: Fisher (1936), UCI, CC BY 4.0. See THIRD_PARTY_DATA.md.
// Strict CPU Float64; training, validation and test retain protected roles.
import aner.dataset
import aner.nn
import aner.ml
import aner.parallel
import aner.dev

let parts = dataset.iris().partition(validation: 0.2, test: 0.2, seed: 42)
print(parts.audit())
let model = ml.classifier(
    nn.mlp(inputs: 4, hidden: List(8), outputs: 3, seed: 42),
    standardize: true, loss: "cross_entropy", optimizer: "adam")
let config = ml.training(epochs: 40, batch: 32, rate: 0.01, seed: 42)
    .validation(parts.validation())
let execution = parallel.device(device: "cpu", dtype: "Float64")
let fitted = parallel.fit(model: model, data: parts.train(),
    config: config, execution: execution, progress: true)
dev.capture("Canonical fitted classifier", fitted)
print(fitted.summary())
print(fitted.evaluate(parts.test()).summary())
