正文
本项目的文档在 Documentation 文件中:
介绍
Bender 是 MetalPerformanceShaders 之上的一个抽象层(abstraction layer),可用于操作神经网络。在人工智能领域,人们对在移动设备上执行神经网络的兴趣越来越大,即便其训练过程是预先在其它地方完成的。我们希望人们能更轻松地在 iOS 上运行预训练的网络。
Bender 可以让你轻松使用卷积、池化、全连接和一些规范化等最常见的层,从而轻松地定义和运行神经网络。而且这些层接收参数的方式也很灵活。我们希望能加载在 TensorFlow 或 Caffe2 等框架上训练好的模型。目前 Bender 有一个用于 TensorFlow 的适配器(adapter),其可以加载带有变量的图(graph),并将其「翻译」成 Bender 的层(layer)。这个功能仅支持一部分 TensorFlow 指令,但我们计划增强它,使其覆盖更大的范围。
Bender 已经可用了,但也仍处在积极的开发阶段,我们也希望看到社区的需求能推动它的发展。注意,它的 API 还不是很稳定。
我们为什么需要 Bender?
在 Xmartlabs,我们曾经想要启动一个机器学习项目,然后我们调查了可以在 iOS 中使用的框架。我们发现 MetalPerformanceShaders 很有用,但对用户并不太友好,我们发现我们重复了大量代码和信息。这就是我们为什么要开始构建一个能够处理这类事物的框架。
我们还发现我们需要将使用 TensorFlow 训练的模型翻译成 iOS 上可用,为此我们需要编写脚本,使之可以将权重转换成 MPSCNN 格式,并将 TensorFlow 的层中不同类型的参数映射成 MPSCNN 核所使用的参数。TensorFlow 可以为 iOS 进行编译,但目前它并不支持在 GPU 上运行,而这却正是我们需要的。我们也并不想将 TensorFlow 的静态库包含在我们的项目中。所以我们开发了一个适配器,可以将 TF graph 解析并翻译成我们的 Bender layer。
使用方法
你可以使用我们自定义的算子在 Bender 中定义你自己的网络,或者你可以加载从 TensorFlow 导出的模型。你可以通过如下方式定义一个网络和加载一个模型:
import Bender// Define a network and how it will load its weights / parameters
let randomLoader = RandomParameterLoader(maxSize: 7*