3 个版本
0.2.2 | 2024年2月13日 |
---|---|
0.2.1 | 2024年2月12日 |
0.1.9 |
|
143 in 机器学习
115KB
2K SLoC
Unda
通用神经网络库
Unda 旨在将深度学习的未来带给 Rust 世界。凭借动态输入特性、并发小批量处理以及完整的 Dense 网络支持(卷积即将到来),Unda 正迅速崛起,使神经网络开发变得简单且 极其快速。
安装
使用包管理器 cargo 将 unda 添加到您的 Rust 项目中。
cargo add unda
或在您的 cargo.toml 文件中直接添加依赖项
[dependencies]
unda = "{version}"
用法
use unda::core::network::Network;
use unda::core::layer::{methods::activations::Activations, layers::{LayerTypes, InputTypes}};
use unda::core::data::input::Input;
use unda::core::layer::{methods::errors::ErrorTypes};
fn main() {
let inputs = vec![vec![0.0,0.0],vec![1.0,0.0],vec![0.0,1.0], vec![1.0,1.0]];
let outputs = vec![vec![0.0],vec![1.0],vec![1.0], vec![0.0]];
let mut new_net = Network::new(4);
new_net.set_input(InputTypes::DENSE(2))
new_net.add_layer(LayerTypes::DENSE(3, Activations::RELU, 0.001));
new_net.add_layer(LayerTypes::DENSE(1, Activations::SIGMOID, 0.001));
new_net.compile();
new_net.fit(&inputs, &outputs, 2, ErrorTypes::MeanAbsolute);
println!("1 and 0: {:?}", new_net.predict(vec![1.0,0.0])[0]);
println!("0 and 1: {:?}", new_net.predict(vec![0.0,1.0])[0]);
println!("1 and 1: {:?}", new_net.predict(vec![1.0,1.0])[0]);
println!("0 and 0: {:?}", new_net.predict(vec![0.0,0.0])[0]);
new_net.save("best_network.json");
}
示例
unda 仓库托管了大量的示例机器学习模型,用于计算一系列常见问题。这些示例可以在 /examples
文件夹中找到,可以通过输入以下命令运行:
cargo run --release --example {example_name}
其中 example_name
是您想要运行的文件/文件夹的名称,省略了 .rs 扩展名
目前,Unda 对 XoR、MNIST 以及 Kaggle 上的一个 乳腺癌模型 提供了示例实现
注意!在运行 MNIST 示例时,请确保将适当的 ubyte 文件放入此仓库的 /src/util/mnist 目录中。我们目前正在努力使用 reqwest 自动构建数据集,但到目前为止,必须手动进行
以下是必要的 ubyte 文件的 Google Drive 链接
对未来机器学习的启示
使用内置的 Input 特性,几乎可以将任何数据类型映射为神经网络的输入,而无需进行任何折衷,层内部的特性允许以即插即用的方式开发神经网络。目前,Unda 对 Dense 层、Adam 优化反向传播、激活函数(Sigmoid、TanH、ReLU 和 LeakyReLU)以及每个模型和每层的损失分析都提供了全面支持。
梯度下降目前既可以同步发生,也可以通过随机梯度下降异步发生,还可以通过小批量梯度下降异步发生。
待办事项
目前,Unda 处于非常早期的测试阶段,以下功能仍在开发中
【神经网络目标】
- 为层创建抽象表示(层特质)
- 密集层
- 卷积层
- 分类交叉熵
- SoftMax
- 循环层
- 允许每个层有不同的激活函数和学习率
- 反向传播中的Adam优化
- 解析CSV数据的辅助函数
- 生成MNIST数据集的辅助函数
- 生成和推导分类数据的辅助函数
如果您喜欢开源开发,Unda团队非常愿意进行任何可以实施的工作,如果您想帮忙,请联系 [email protected]!
许可证
根据您的选择,受Apache许可证版本2.0 https://apache.ac.cn/licenses/LICENSE-2.0 或MIT许可证 http://opensource.org/licenses/MIT 的许可。此文件只能根据这些条款进行复制、修改或分发。
依赖项
约6MB
约105K SLoC