2 个版本
0.0.2 | 2020年6月7日 |
---|---|
0.0.1 | 2020年6月5日 |
#667 in 机器学习
16KB
244 行代码(不包括注释)
blasphemy
Rust的安全性。BLAS的原生速度。受Keras启发的神经网络架构的用户界面。这就是blasphemy。
Blasphemy是早期的工作 - 以下是功能路线图。它主要基于RustML,注重人体工程学和具有消失梯度的数值稳定性。
功能路线图
- 随机初始化以打破对称性
- 线性层
- Softmax层
- Sigmoid层
- ReLU层
- 残差层
更新
- 0.0.2 将随机初始化改为围绕0.0中心 - 更稳定
- 0.0.2 修复了线性层的反向传播中的错误
快速入门
您需要BLAS才能使用blasphemy。如果您使用Ubuntu/Debian,可以使用以下命令完成此操作
$ sudo apt-get install libblas-dev libopencv-highgui-dev libopenblas-dev
Hello World示例
此示例创建了一个具有三个线性层和softmax归一化的神经网络。
use blasphemy::{NeuralNet, Matrix};
let mut nn = NeuralNet::new(4); // new Neural Net with input shape (1,4)
nn.linear(5); // add a linear activation layer with 5 neurons
nn.linear(5); // add a linear activation layer with 5 neurons
nn.linear(3); // add a linear activation layer with 3 neurons
nn.softmax(); // apply softmax normalization to the output
let mut err = 0f64;
for iter in 0..200{
// train on two examples for 200 epochs
let input = Matrix::from_vec(vec![1f64,0f64,0f64,1f64], 1,4);
let output = Matrix::from_vec(vec![1f64,0f64,0f64], 1,3);
err = nn.backprop(&input, &output); // accumulate errors for one example
let input = Matrix::from_vec(vec![0f64,2f64,2f64,0f64], 1,4);
let output = Matrix::from_vec(vec![0f64,1f64,0f64], 1,3);
err = nn.backprop(&input, &output); // accumulate errors for one example
if iter % 3 == 0 {
// every 3rd example, perform gradient descent with the accumulated errors
nn.grad_descent();
println!("iter={} error={}", iter, err);
}
}
// make a prediction
let input = Matrix::from_vec(vec![1f64,0f64,0f64,1f64], 1,4);
let prediction = nn.forward_prop(&input);
注意,随着层数增加到3-4层以上,数值稳定性可能会变得麻烦:这是一个未来的改进项目,特别是结合残差层。
依赖项
~6.5MB
~120K SLoC