1 个不稳定发布
0.0.1 | 2023年11月16日 |
---|
#11 in #triton
54KB
957 代码行
hydra 🐍
triton crate的克隆,具有矩阵乘法和反向传播的GPU运行时绑定
安装
使用包管理器 cargo 将 triton 添加到您的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)
许可
依赖项
~5MB
~99K SLoC