mojograd是 micrograd 的 Mojo 实现, 具有类似 PyTorch 的 API 的反向模式 autodiff 库。
开源地址:
https://github.com/automata/mojograd
目标是尽可能接近微变,保持 定义计算图的语法非常干净。 像 micrograd 一样,它目前只支持标量值,但我们 计划在不久的将来扩展它以支持 Tensors。
请注意,这是在 WIP 中,并且依赖于静态寄存器可传递结构,因此 向后传递复制值,并且可能非常慢(Mojo 特征支持应该 改进它,所以请继续关注!然而,即使是现在,零 优化后,前向传递已经比原始 Python 实现快 40 倍 (见下面的基准)。mojograd
mojograd通过重载算子动态构建计算图 在类型上,执行前向传递。只需将您的表达式写成这样 一个正态(非差分)方程,并调用以执行 向后传递:Value backward()
from mojograd import Value
var a = Value(2.0)
var b = Value(3.0)
var c: Float32 = 2.0
var d = b**c
var e = a + c
e.backward()
a.print() # => <Value data: 2.0 grad: 1.0 op: >
b.print() # => <Value data: 3.0 grad: 0.0 op: >
d.print() # => <Value data: 9.0 grad: 0.0 op: ** >
e.print() # => <Value data: 4.0 grad: 1.0 op: + >