// Opt-in Philox normal weights; existing NN defaults and zero biases stay intact.
import aner.random
import aner.math
import aner.nn
import aner.ml

let rng = random.generator(seed: 20261019)
let fan_in = 4
let fan_out = 8
let values = Array<Float64>(size: fan_in * fan_out, fill: 0.0)
let standard_deviation = math.sqrt(2.0 / Float64(fan_in))
for index in Range(values.len()) {
    values[index] = rng.normal(mean: 0.0, stddev: standard_deviation)
}
let weights = values.to_tensor(rows: fan_in, cols: fan_out)
let network = nn.sequential(seed: 42)
    .dense(inputs: fan_in, outputs: fan_out,
        weights: weights, bias: nn.zeros(1, fan_out))
    .relu()
    .dense(inputs: fan_out, outputs: 3, initialization: "xavier")
let classifier = ml.classifier(network, standardize: true)
print(random.engine())
print("Custom first-layer seed: " + String(rng.seed()))
print(network.summary())
print(classifier.summary())
// The final Dense stage deliberately uses the existing NN Xavier uniform API.
