# #神经 #神经网络 #线性 #BLAS #Keras #随机

blasphemy

受Keras启发,由BLAS驱动。每层使用一行代码构建神经网络。这就是BLASphemy。

2 个版本

0.0.2 2020年6月7日
0.0.1 2020年6月5日

#667 in 机器学习

Apache-2.0

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