#神经网络 #机器学习 #深度学习 #AI #卷积 #网络 #密集神经网络

bin+lib unda

通用机器学习库,用于神经网络开发和分析

3 个版本

0.2.2 2024年2月13日
0.2.1 2024年2月12日
0.1.9 2024年2月11日

143 in 机器学习

MIT 许可证

115KB
2K SLoC

unda icon

Unda

通用神经网络库

crates.io Documentation Unit Tests

Unda 旨在将深度学习的未来带给 Rust 世界。凭借动态输入特性、并发小批量处理以及完整的 Dense 网络支持(卷积即将到来),Unda 正迅速崛起,使神经网络开发变得简单且 极其快速

安装

使用包管理器 cargounda 添加到您的 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