Skip to content

dbsxdbsx/only_torch

Repository files navigation

这是啥?

一个用纯Rust(不想用C++)打造的仿Pytorch的玩具型AI框架(目前尚不成熟,请勿使用)。该项目不打算支持GPU--因后期可能要支持安卓等平台,不想受制于某(几)种非CPU设备。但可能会加入NEAT等网络进化的算法。

名字由来

一部分原因是受到pytorch的影响,希望能写个和pytorch一样甚至更易用的AI框架;另一部分是希望本框架只触及(touch)一些关键的东西:

  • only torch Rust --- 只用Rust(不用C++是因为其在复杂逻辑项目中容易写出内存不安全代码,也不打算支持Python接口);也不用第三方lib(所以排除tch-rs),这样对跨平台支持会比较友好。
  • only torch CPU --- 不用GPU,因要照顾多平台也不想被某个GPU厂商制约,且基于NEAT进化的网络结构也不太好被GPU优化(也省得考虑数据从CPU的堆栈迁移到其他设备内存的开销问题了)。
  • only torch node --- 没有全连接、卷积、resnet这类先入为主的算子概念,具体模型结构均基于NEAT进化。
  • only torch tensor --- 所有的数据类型都是内置类型tensor(实现可能会参考peroxide),不需要第三方处理库,如numpyarrayopenBLAS关于blas的一些说明)。
  • only torch f32 --- 网络的参数(包括模型的输入、输出)不需要除了f32外的数据类型。

文档

目前无人性化的文档。可直接看Rust自动生成的Api Doc即可。

使用示例

(无)

TODO

  • 等ada_line例子跑通后:Variable节点做常见的运算重载(如此便不需要用那些丑陋的节点算子了)
  • parent.borrow_mut().children_mut()改变后如何保证其matrix形状是合法的该节点运算后matrix?
  • fn as_node_enum(&self) -> NodeEnum { NodeEnum::Step(self.clone()) }会否影响计算图graph?
  • Tensorlei的index将[[优化成[?
  • Tensor类的slice(&[0..m, j..j+1])是否需要?
  • children_mut是否可合并至children()? and value_mut是否可合并至value?
  • fn as_node_enum(&self) -> NodeEnum trait method 是否多余,对于具体实现的节点,可否隐式转换或直接各节点返回NodeEnum?(只要不要影响后期各种算子的重载)?

// TODO:use approx::assert_abs_diff_eq; need or not? 目前需要先解决有没有的问题,而不是好不好

  • [] 实现类似tch-rs中tch::no_grad(|| {});的无梯度功能;
  • [] 常用激活函数,tanh,Softplus,sech
  • [] 基于本框架解决XOR监督学习问题
  • [] 基于本框架解决Mnist(数字识别)的监督学习问题
  • [] 基于本框架解决CartPole(需要openAI Gym或相关crate支持)的深度强化学习问题
  • [] 尝试实现下CFC
  • [] 保存的json网络结构设计方案

参考资料

训练用数据集(包括强化学习gym)

数学/IT原理

开源示例

(较为成熟的3方库)

NEAT、神经架构进化

符号派:逻辑/因果推断

神经网络的可解释性

超参数优化

CPU加速

强化学习

rust+大语言模型(LLM)

(自动、交互式)定理证明

博弈论(game)

其他

遵循协议

本项目遵循MIT协议(简言之:不约束,不负责)。

About

Rust写的简易ML库(尚很不成熟)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages