详解帝国理工集成工具TensorLayer:控制深度学习开发复杂度

对于开发者而言,深度学习系统的交互性和复杂度正在增加。从建立不断迭代强化的可扩展性数据集,到更多动态模型,再到神经网络内部更加连续的学习,这使得通过轻量级工具全面管理深度学习开发的需求也越发强大。而 TensorLayer 正是这样一种可管理深度学习开发复杂度的工具。


甚至在部署之后,新的训练样本、人类的见解以及操作经验会不断出现,因此升级模型并跟踪其变化的能力变得不可或缺。」伦敦帝国理工学院的一个团队说,他们开发了一个库,用来管理深度学习开发者在复杂的多项目上做的迭代。「开发者必须用大量的开发周期整合构建神经网络的组件、管理模型生命周期、组织数据,以及调整系统并行性。」

为了更好地管理开发,该团队借助一个通用的 Python 库打造了 TensorLayer,这是一种集成的开发方法,其中所有的元素(操作、模型生命周期、并行计算、失败)被抽象为模块化格式。这些模块中的一个用于管理神经网络层,一个用于管理模型及其生命周期,一个通过为所有系统的训练数据提供统一的表征来管理数据集,另外还有一个工作流模块用于处理容错。顾名思义,TensorFlow 是进行训练和推断的核心平台,数据存储在 MongoDB 中,这是深度学习研究机构的常见设置。



深度学习开发人员利用 TensorLayer 功能写了一个多媒体应用。这些功能包括提供和输入层实现、构建神经网络、管理模型生命周期、构建在线或离线数据集,以及撰写训练计划等,分为四个模块:层、模型、数据集和工作流。

该团队说,尽管 Keras 和 TFLearn 等现有工具很有用,但扩展性不强,不足以应对越来越复杂和不断迭代的网络。它们提供必要的抽象化以降低采用壁垒(adoption barrier),但这样做也对用户掩盖了底层引擎(underlying engine)。尽管从底层调整和修改对 bootstrap 有益,且对于解决很多现实问题很有必要,但这是非常困难的。

与 Keras 和 TFLearn 相比,TensorLayer 不仅提供高水平的抽象化,还提供端到端的工作流,包括数据预处理、训练、后处理、服务模块和数据库管理,这些都是开发者构建整个系统的关键。

TensorLayer 提倡灵活性和可组合性更强的范式:神经网络库可以和私有引擎(native engine)互换。这使得用户可在不丢失可见性的情况下轻松使用预构建模块。该非侵入式本质也使得合并其他 TF 包装器,如 TF-Slim 和 Keras 变得可行。但是,该团队认为灵活性不能以性能为代价。

此团队在以下论文中重点强调了许多应用,也详细介绍了每一个模块、整体架构和发展现状。这些应用包括生成对抗网络(generative adversarial network)、深度强化学习(deep reinforcement learning),以及终端用户环境的超参数调节。TensorLayer,自去年从 GitHub 发布后,还被用于多模型研究、图像变换和医学信号处理。

TensorLayer 正处在一个主动发展的阶段,而且已经从开放社区接收到大量的贡献性工作。它已经被帝国理工学院、卡内基梅隆大学、斯坦福大学、清华大学、加州大学洛杉矶分校、瑞典林雪平大学等高校的研究人员,以及谷歌、微软、阿里巴巴、腾讯、ReFULE4、彭博等公司的工程师广泛使用。

论文:TensorLayer: A Versatile Library for Efficient Deep Learning Development 



深度学习强力地推动了计算机视觉、自然语言处理和多媒体等领域的发展。然而开发一个深度学习系统通常十分困难和复杂,因为它经常涉及到构建神经网络架构、管理正在训练或已训练的模型、调整优化过程、预处理和组织数据等过程。TensorLayer 是一个通用型的 Python 库,旨在帮助研究者和工程师高效地开发深度学习系统。它为神经网络、模型和数据管理、并行工作流机制提供了丰富的抽象化方法。TensorLayer 在提升效率的同时,它还保留性能和可扩展性。TensorLayer 先前已经发布在 Github 上,并且已经帮助很多学术研究员和工业应用者开发深度学习现实应用。

TensorLayer 帮助我们管理和提高开发效率的方法主要是通过以下四个模块来实现,这四个模块也即整个系统的架构。TensorLayer 可以基于这些模块实现整个开发过程和相应的功能,因此我们可以在这基础上利用编程语言实现各种不同的应用,如 GAN、超参数精调等。

2.1 层模块

层是神经网络的核心基元,TensorLayer 提供了一个包含大量参考层实现(比如 CNN、RNN、dropout、dropconnect、批归一化及其他)的层模块。该模块通过类似于 Lasagne [12] 那样的声明式方式堆叠层级而构建神经网络。每个层给定唯一的键值,帮助开发者在层之间实现细粒度参数共享。

2.2 模型模块

模型是独立功能单元的逻辑表示,可以在生产过程中被训练、评估和部署。每个模型都有独立的架构,具有可被保存、缓存和重新加载的不同版本或状态(即权重)。


2.3 数据集模块

数据集模块用于管理训练样本和预测结果。样本和结果以文档的形式存储在 MongoDB 中。每个文档包含一个单独的主键(key)、样本、标注和用户自定义标签。

2.4 工作流模块

工作流模块提供任务抽象,以启用容错异步训练。一个训练任务由 3 个元组分别识别:输入数据集键值(key)、模型键值和输出数据集键值。

入门工程机器学习库伦敦帝国理工PythonTensorLayer论文
1