#triton #column #matrix #learning #modes #accuracy #mode

已删除 triton_hydra

使用CUDA后端构建的矩阵数学triton项目分支

1 个不稳定发布

0.0.1 2023年11月16日

#11 in #triton

MIT 许可证

54KB
957 代码行

hydra 🐍

triton crate的克隆,具有矩阵乘法和反向传播的GPU运行时绑定

安装

使用包管理器 cargotriton 添加到您的Rust项目中。

cargo add triton_hydra

或直接在您的 cargo.toml 文件中添加依赖项

[dependencies]
triton_hydra = "{version}"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

使用方法

Triton充当典型的神经网络实现,但允许以更动态的方式解决您可能不知道如何解决的问题。作为深度学习领域的“蛮力”方法,在训练过程中的n个时期后,triton将评估每个神经元和列的特定错误,并决定是否向列中添加神经元,添加全新的列,删除神经元或删除列。

Triton将训练和增长一个理想的神经网络,直到达到特定的准确率,然后返回完成的模型

use triton_grow::network::{network::Network, activations, modes::Mode};

fn main() {
    let mut inputs = vec![vec![0.0,0.0],vec![1.0,0.0],vec![0.0,1.0],vec![1.0,1.0]];
    let mut outputs = vec![vec![0.0],vec![1.0],vec![1.0],vec![0.0]];
    let mut new_net: Network = Network::new(vec![2,3,1], activations::SIGMOID, 0.1);
    
    new_net = new_net.train_to_loss(inputs, outputs, 0.001, 100000, Mode::Avg, 0.001, 3, 10);
    println!("1 and 0: {:?}", new_net.feed_forward(&vec![1.0,0.0])[0].round());
    println!("0 and 1: {:?}", new_net.feed_forward(&vec![0.0,1.0])[0].round());
    println!("1 and 1: {:?}", new_net.feed_forward(&vec![1.0,1.0])[0].round());
    println!("0 and 0: {:?}", new_net.feed_forward(&vec![0.0,0.0])[0].round());
    println!("Net network made: {:?}", new_net.layers);

}

验证结果

在将Triton的自增长方法与传统预配置的网络模型进行测试后。三个神经网络都被要求学习一个简单的以下输入和输出的 XOR预测器

输入

[ 1.0 , 0.0 ]
[ 0.0 , 1.0 ]
[ 0.0 , 0.0 ]
[ 1.0 , 1.0 ]

输出

[ 1.0 ]
[ 1.0 ]
[ 0.0 ]
[ 0.0 ]

测试

模型名称 层 {输入 -[隐藏] - 输出} 达到0.001平均损失所需的时期
最小 2 - { 3 } - 1 7,880,000
良好适配 2 - { 3 - 4 - 3 } - 1 2,790,000
Triton 2 - { 自我增长 } - 1 150,000

Triton比最小适配模型提高了98.09%,比良好适配模型提高了94.62%。

待办事项

目前,triton处于非常beta阶段,以下功能仍在开发中

  • 修改神经网络(1/2)
    • 向现有网络中的任何位置添加具有n个神经元的全新层
    • 从现有网络中删除层
  • 反向传播仅影响单个列(允许新添加的层“赶上”')
  • 分析模式在反向传播期间允许记录所有单个错误
  • 更新训练函数
    • 输入所需的成功率
    • 动态错误分析,允许选择网络是应该增长还是缩小
    • 允许的错误阈值在±范围内,以实现较宽松的学习过程,尤其是在添加新神经元层时
  • 模型序列化(serde)

许可

MIT

依赖项

~5MB
~99K SLoC