#神经网络 #下降 #随机 #梯度 # #并行化 #CPU

snail_nn

小型神经网络库,在CPU上运行,支持并行化随机梯度下降

1个不稳定版本

0.1.0 2023年8月1日

#517 in 机器学习

Apache-2.0

360KB
565

[WIP] Snail NN - 小型神经网络库

具有反向传播和并行化随机梯度下降实现的完全功能神经网络库。

示例

将图像存储在神经网络中,放大并插值它们之间。

cargo run --example imagepol --release

image


强制性的异或示例

cargo run --example xor --release

image


示例代码

use snail_nn::prelude::*;

fn main(){
    let mut nn = Model::new(&[2, 3, 1]);
    nn.set_activation(Activation::Sigmoid)

    let mut batch = TrainingBatch::empty(2, 1);
    let rate = 1.0;

    // AND - training data
    batch.add(&[0.0, 0.0], &[0.0]);
    batch.add(&[1.0, 0.0], &[0.0]);
    batch.add(&[0.0, 1.0], &[0.0]);
    batch.add(&[1.0, 1.0], &[1.0]);

    for _ in 0..10000 {
        let (w_gradient, b_gradient) = nn.gradient(&batch.random_chunk(2));
        nn.learn(w_gradient, b_gradient, rate);
    }

    println!("ouput {:?} expected: 0.0", nn.forward(&[0.0, 0.0]));
    println!("ouput {:?} expected: 0.0", nn.forward(&[1.0, 0.0]));
    println!("ouput {:?} expected: 0.0", nn.forward(&[0.0, 1.0]));
    println!("ouput {:?} expected: 1.0", nn.forward(&[1.0, 1.0]));
}

特性

  • sigmoid、tanh和relu激活函数
  • 并行化随机梯度下降
  • 在我的机器上运行(ツ)
  • 会消耗大部分CPU

待办事项

  • 更多示例
  • 更好的文档
  • 使用wgpu的计算着色器

依赖项

~1.5MB
~30K SLoC