AXON:在Elixir中创建神经网络的库

2021-04-09 00:07:27

功能API - 所有其他API构建的数字定义的低级API(DEFN)。

模型创建API - 管理模型初始化和应用程序的高级模型创建API。

Axon提供抽象,可轻松集成,同时保持每个组件之间的分离级别。您应该能够在没有依赖性的情况下使用任何API。通过解耦API,Axon可以完全控制创建和培训神经网络的每个方面。

在最低级别的情况下,Axon由许多模块组成,具有深度学习中的常用方法的功能实现:

功能API中的所有方法都被实现为数值定义(DEFN)。这意味着您可以使用任何NX编译器或后端来加速Axon。此外,您可以在Axon功能API中任意撰写方法,使用您自己的数值定义。 Axon完全在NX Tensors上工作,所以任何内置在NX上的图书馆都可能与Axon相结合。

由于Axon的高级API在功能API之上构建,因此适用相同的优点。每个神经网络都可以是使用任何NX编译器或后端编译的JIT或AOT,或者甚至转换为Tensorflow Lite和Onnx等高级神经网络格式。

该模型只是一个Elixir结构,因此将来将其序列化到未来的多种格式是简单的。使用Inspect协议轻松自定义模型检测的额外福利。以上模型印刷为:

----------------------------------------- Model == =============================================图层形状参数== ============================================= input_1(输入){ nil,784} 0 dense_2(密集){nil,128} 100480 dense_3(密集){nil,10} 1290 softmax_4(softmax){nil,10} 0 -------------- -----------------------------------------

Axon为使用型号提供了一些便利设施。首先,我们选择采取哲学,模型唯一担忧是初始化和应用。这意味着模型不应该关注所有培训细节。 Axon提供宏观Axon.init / 2和Axon.predict / 4用于初始化和应用模型:

型号=轴突。输入({nil,784})|>轴突。致密(128,激活::Relu)|>轴突。辍学(速率:0.5)|>轴突。密集(10,激活::Softmax)Params = Axon。 init(型号,编译器:exla)axon。预测(模型,参数,输入,编译器:exla)

两个宏都有效地解密,这意味着您可以轻松地将模型执行与现有的数值定义集成。

有计划支持经常性层,注意层,还有更多。我们的目标是维持一个富有成效,可扩展的API和与其他现代深度学习框架的API。如果有功能,您需要查看路线图上不包含在路线图中,请随时打开一个问题。

培训API的目的是提供用于实施训练环的便利性和常用例程。 API部分受到优秀的Pytorch Lightning库的启发。

目前,Axon训练API由2种方法:axon.training.step和axon.train.train。在实践中,您可以使用这些方法来培训这样的轴突模型:

型号=轴突。输入({nil,784})|>轴突。致密(128)|>轴突。密集(10,激活::softmax)训练_params = model |>轴突。训练。步骤(:CASTORICAL_CROSS_ENTROPY,AXON。优化仪。ADAMW(0.005))|>轴突。训练。火车(投入,目标,时期:10,编译器:EXLA)

值得注意的是,优化API不直接取决于Axon模型。您可以使用API​​优化任何可差异的目标函数。

axon.training.train实现了一个常见的训练循环,初始化训练状态,并通过一些给定数量的时期的培训迭代。它返回序列化的最终培训状态和推理工作负载中的潜在用途。目前,轴突训练API相当有限;但是,有计划扩展它。在立即的未来,我们计划支持:

此外,我们很乐意探索像分布式培训等更高级的事情。我们还在寻求通过完全运行本机加速器来提高培训环路的绩效。

要使用Axon,您将需要安装elixir。然后通过MIX构建工具创建ELIXIR项目:

然后,您可以将Axon添加为mixi.exs的依赖项。目前,在我们第一次发布时,您必须使用Git依赖性:

您' LL也可能包含一个NX编译器,例如EXLA,用于任何实际的深度学习工作量:

def deps do {:axon,"〜> 0.1.0-dev",github:" elixir-nx / axon",分支:" main"},{:exla,"〜>〜>〜> 0.1.0-dev",github:" elixir-nx / nx",稀疏:" exla" override:true},{:nx,&#34 ;〜> 0.1.0-dev",github:" elixir-nx / nx",稀疏:" nx" override:true}结束 在Apache许可证下获得许可,版本2.0("许可证"); 除非符合许可证,您可能无法使用此文件。 您可以在http://www.apache.org/licenses/license-2.0获取许可证的副本 除非适用法律或书面同意,否则在许可证下分发的软件分布在AN&#34上;如" 基础,没有任何形式的保证或条件,无论是表达还是暗示。 请参阅许可证管理权限和限制的特定语言许可证。