5 个版本

0.2.0 2024年1月17日
0.1.3 2023年12月2日
0.1.2 2023年12月1日
0.1.1 2023年12月1日
0.1.0 2023年12月1日

174机器学习 中排名

Download history 24/week @ 2024-03-11 32/week @ 2024-04-01 50/week @ 2024-04-29

每月下载量 65

MIT 许可证

100KB
2K SLoC

fksainetwork

github crates.io docs.rs

一个能够 学习 和计算输出的 神经网络
这个项目只是为了娱乐 :)


请访问 内部工作原理 了解更多。


用法

[dependencies]
fksainetwork = "0.2.0"

示例(前馈)

let mut network = Network::new(2, &[ //2 neuron inputs
            (10, Initialization::He, Activation::Sigmoid, false), //10 hidden neurons
            (2, Initialization::Xavier, Activation::LeakyReLU, true) //2 neuron outputs, true: batch normalisation
        ], Loss::BinaryCrossEntropy, true);
//or: let network = load_network("path/to/network-file");

//calculating
let input = vec![1.0, 1.0];
let output = network.calculate(&input); //calculate
println!("{:?}", output);

//learning
//batch size of 2
network.learn(0.01,
  &vec![vec![0.0, 1.0], vec![0.0, 3.0]], //input values, batch size of 2
  &vec![vec![1.0, 0.0], vec![0.0, 1.0]] //expected values
);

//NOTE: if you call 'learn', u do not need to call 'calculate' beforehand

//save
save_network("path/network-file", &network);

示例(卷积)

let network = ConvolutionalNetwork::new(
            //convolution layers
            &[
                (2, &[Initialization::Xavier;20], Activation::ReLU, 2, Pooling::Max), //20 channels, kernel 2x2, pooling max 2.0
                (3, &[Initialization::Xavier;40], Activation::ReLU, 2, Pooling::Max) //40 channels, kernel 3x3, pooling max 2.0
            ],
            13, 13, 1, //input size of w: 13, h: 13, channels: 1
            //input similar to the Feed Forward Network
            &[
                (3, Initialization::Xavier, Activation::LeakyReLU, false)
            ],
            Loss::BinaryCrossEntropy, true
        );
//or: let network = load_cnn_network("path/to/network-file");

//pretend these samples are actual images of something
let sample0 = Matrix::new(13, 13);
let sample1 = Matrix::new(13, 13);
let sample2 = Matrix::new(13, 13);

//calculate
let output = network.calculate(&vec![&sample0, &sample1, &sample2]);
println!("{:?}", output);

//learn
network.learn(0.04, &vec![&sample0, &sample1, &sample2], &vec![[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]);

//print outputs
cnn_network_bmp("path/to/directory", &network);

//save network
save_cnn_network("path/to/network-file", &network);

更新补丁 :)

0.1.3: 添加了 Tanh 激活函数。
0.1.3: 改进了文档。
0.2.0: save_network 和 load_network 函数现在使用 str 而不是 String 作为路径。
0.2.0: 改进了学习算法。
0.2.0: 添加了卷积神经网络。
0.2.0: 添加了更多的损失函数和初始化函数。
0.2.0: 将 learn_bpg_mse 改为 learn,因为损失函数现在是函数参数。
0.2.0: 更新了前馈网络的 "new()" 函数参数。

依赖项

~1MB
~18K SLoC