#神经网络 #人工智能 #网络

rust_nn

Rust中的教育级神经网络框架

1个不稳定版本

0.1.0 2023年12月31日

#509 in 机器学习

MIT/Apache

38KB
933

Rust NN:Rust中的教育级神经网络框架

特性包括

  • 构建和训练网络的人性化API。
  • 预定义的优化器和激活函数方法,以及通过实现一个特质添加自己的能力。
  • 通过egui提供的完全可定制的GUI,可以在训练期间查看您的网络,包括一些预构建的GUI。

示例

有关更多详细示例,请查看示例目录。

  • 示例目录. 突出示例
    • adder_gui -- 创建自定义训练GUI以训练神经网络进行加法的一个简单示例
    • learn_image -- 训练神经网络以放大和插值图像的更复杂示例

注意:以发布模式运行可以使训练显著加快,即执行 cargo run --release

最小示例

以下是创建一个学习XOR门行为的模型的方法。

let mut net = NeuralNet::new(2, 2, Activations::Arctan);
net.add_layer(1, Activations::Sigmoid);

let inputs = Matrix2::from_array([[0, 0], [0, 1], [1, 0], [1, 1]]).into();
let targets = Matrix2::from_array([[0], [1], [1], [0]]).into();

let learning_rate = 10e-0;
let epochs = 10_000;

// Initialize the optimizer to log the error at each epoch
let optim = Optimizer::new(OptimizerMethod::Backprop, learning_rate, epochs).with_log(Some(1));
        
optim.train(&mut net, &inputs, &targets);

let fin = net.mean_squared_error(&inputs, &targets).unwrap();

println!("------------------");
let res = net.run_batch(&inputs).unwrap();
for (inp, out) in inputs.to_vec().into_iter().zip(res.to_vec()) {
    println!("{:?} -> {}", inp.to_vec(), out[0])
}

要使优化器在每个epoch显示错误图,可以这样做

optim.train_gui<NNGui>(&mut net, &inputs, &targets);

在这里,NNGui 是一个预定义的结构,实现了 Visualizer 特质,允许优化器异步地启动和更新GUI(这意味着性能不应该受到影响)。

依赖关系

~7–25MB
~362K SLoC