///|
/// 神经网络前向传播示例
/// 构建 MLP: input(2) -> linear(3) -> relu -> linear(1) -> sigmoid
fn main raise {
// 构建网络
let x = @neural.input([2])
let h = @neural.linear(x, 3, init_typ=@neural.init_he_normal())
let a = @neural.activation(h, @neural.act_relu())
let o = @neural.linear(a, 1, init_typ=@neural.init_glorot_uniform())
let _ = @neural.activation(o, @neural.act_sigmoid())
let nn = @neural.get_network(x)
@neural.init_network(nn)
// 输入数据
let inp = @algodiff.pack_arr(@ndarray.from_data([1, 2], [0.5, -0.5]))
// 前向传播
let (y, params) = @neural.forward(nn, inp)
let y_arr = @algodiff.unpack_arr(y)
println("网络输出:")
println(@ndarray.to_string(y_arr))
println("\n参数数量: \{params.length()}")
// 反向传播
let (pri, adj) = @neural.backward(nn, y)
println("前向值数量: \{pri.length()}")
println("反向梯度数量: \{adj.length()}")
}