0
今年 6 月,由北京大学前沿计算研究中心董豪博士主导开源的 TensorLayer 在 GitHub 上的 Star 数突破五千,这也标志着这一工具进入一个全新里程碑。TensorLayer 是一款基于 TensorFlow 开发的深度学习与强化学习库,它提供高级别的深度学习 API,非常易于修改和扩展,可以同时用于机器学习的研究与产品开发。
2016 年,董豪在帝国理工读博期间,在 Github 上开源 TensorLayer1.0,这一工具于 2017 年获得 ACM MM 最佳开源软件奖。今年 5 月,随着 TensorFlow 升级至 2.0,在北京大学前沿计算研究中心的大力支持下,北京大学和帝国理工的贡献者们(吴睿海、吴润迪、董豪、张敬卿)也将 TensorLayer 升级至全新 2.0 版本,全面支持动态训练模式、动/静态神经网络模型切换以及 TensorFlow2.0,并同时大大简化了自定义神经网络的实现。目前,TensorLayer 的下载量接近 20 万次,并逐渐成为深度学习主流框架之一。
谈及发起 TensorLayer 项目的契机,董豪对雷锋网表示,这与他的研究经历息息相关。博士第一年,他主要做一些医疗数据的分析研究,其间涉及到诸多深度学习研究,到了博二和博三,他的研究逐渐从医疗应用转换到深度学习算法。这期间,他逐渐对要不要自己做一个工具集进行了思索,随后所做的一个模型压缩项目真正导向他做出 TensorLayer。在这个项目中,他最开始使用的工具是 Theano,在往 TensorFlow 切换的过程中,能使用的工具只有 Keras,但是 Keras 存在一个问题——透明性很差,很难进行一些底层操作,而这对模型压缩中的特定操作造成了困扰。因为需求导向,他决定做出一个追求简洁和透明性的工具,满足实验室的科研需求,提高研究的效率。
旅行中的奇思妙想
而将 TensorLayer 导向开源,则是另一则小故事。
2016 年 9 月,董豪陪同父母旅游,在从美国乘坐游轮去墨西哥的过程中,他将这一工具开源。
「本来已经答应了爸妈和他们一起坐船,但我一上去就后悔了。游轮看起来似乎很不错,在船上欣赏美景,感受大自然,但真实的情况是,连续 7 天每天就是吃吃自助餐,看看表演,翻来覆去地看海景,这种感觉真的很无聊。」
在上船的次日,他租好 WiFi,花了一周时间,把过去所有的代码整理好,发布了 TensorLayer 第一版。当时的想法是,开源的时机已经成熟,既然有了好的东西,就应该拿出来给开发者群体使用,看看效果如何。而这次的游船之旅,则是让他心无旁鹭整理 TensorLayer 的最佳催化剂。
以现在的眼光看来,1.0 版本略显粗糙。但随着这一工具的开源,陆续有更多的开发者提出意见,TensorLayer 开发者团队也基于此做出了更多更好的提升。这一工具不再是一个人的单打独斗。
最初的开发团队以他们实验室为主,此外还有帝国理工大学的一些校友,随着毕业或研究方向的转变,有些人慢慢离开了这支队伍。随着开源,陆续有了许多网友加入这个社群,直到现在都还一直有新鲜血液涌入。
开源之后,他也迎来另一个收获,2017 年,TensorLayer 获得 ACM MM2017 最佳开源软件奖。
「无心插柳柳成荫」的奖项
ACM MM2017 最佳开源软件奖对董豪来说完全是预料之外的收获。在这一工具开源之后,他的好友在一次闲谈时对他说道,「既然做了,不如写篇论文投个会议?」董豪调侃道,「嗯,那就试试吧。」
就是这样一次不经意的对话,没想到促成了这次最佳开源软件奖。得知获奖时,董豪正在意大利参加 ICCV,由论文的另一位共同作者在 ACM MM 现场领奖。
彼时他们团队身处英国,做深度学习研究的团队,以中、美居多,他们对这一工具的宣传也较少,唯一的传播途径就是,董豪会在知乎里回答一些关于 TensorLayer 的疑问。即便这样,TensorLayer 也收获了不少用户群体。好用的工具大家都喜欢。
在这一工具获得 ACM MM 最佳开源软件奖之后,熟知它的人变得更多,社群里的讨论也日益热烈。新的规划也开始启动。
董豪决定,一定要好好维护这一工具,做到毕业之后继续对用户群体负责。从最初的以实验室需求为导向,发展到今天,他对为什么要做好 TensorLayer 又有了新的理解。
他对雷锋网表示,TensorLayer 是一个没有任何公司背景的纯开放社区,这样的好处是,没有公司之间的诸多复杂问题。「有些公司做出来的工具,他们可能抱着这样的考虑,别家的算法,我们就支持的慢一点,本来可以这次进行升级,我们放在下一次。而 TensorLayer 则不同,如果我今天做了一个很好用的东西,或者是在哪篇论文中发现了很好用的方法,那我们可以马上加进来,让开发者第一时间用上。」
2.0 版本全新升级
去年 9 月份,他开始考虑进行这次升级,打算做出新的设计,找到自己的特色,对优势进行提升。TensorLayer 的底层基于 TensorFlow,而 TensorFlow 一直因为静态图的问题被广大开发者诟病,他表示,既然 TensorFlow 决定升级至 2.0 版本,TensorLayer2.0 版本也可以提上议程。
在这次的更新中,董豪也撰文,透露了如下特征:
TensorLayer 由底层至上层可以分为三大模块:
1. 神经网络模块:TensorLayer 提供大量工业界和学术界需要的参考层实现(比如 CNN、RNN、BinaryNet 等),提供类似 Pytorch 的「动态」声明方式,也提供类似 Lasagne 的堆叠式「静态」声明方法来建立模型,并支持动态图和静态图两种训练模式,以支持不同的开发需求。
2. 工作流模块:为了支持整个深度学习开发流程,TensorLayer 提供了大量数据处理和训练流程所需的工具。此外,为了管理整个深度学习开发,以支持项目的存储、比较、溯源等,TensorLayer 提供了生命周期管理功能,包括模型、数据和训练流程的管理,以及支持任务分发以实现多任务并行执行,以加快训练(比如超参数选取)和自动产品化部署。
3. 应用模块:为了促进产业界和学术界的交流,TensorLayer 社区提供了大量应用和预训练模型,包括医疗图像分析、图像增强、人体姿态估计、文本生成、风格迁移、各类增强学习算法等等。
与 Keras 和 Pytorch 相比,TensorLayer 提高了神经网络模块的抽象化设计,同时实现了降低使用现有层和开发新层的工作量,既不需要开发者编写函数以计算层的输出尺寸(Keras 需要),也不需要在使用层时输入上一层的输出尺寸(Pytorch 需要)。这些设计大大方便了框架的拓展。
此外,TensorLayer 提供了整套端到端的工作流,包括数据预处理、训练、服务模块、数据库管理,以及任务自动发放和收集。
目前,TensorLayer 团队分为框架开发和应用开发两个分支,框架开发主要做一些底层的支持和高层抽象,应用开发会基于这一工具做更多应用。本次大更新的主要贡献来自北京大学和帝国理工学院的核心团队,其中,北京大学信息科学技术学院的两位大三学生吴润迪和吴睿海是本次更新的最核心成员。
未来
今年六月,TensorFlow 2.0 Beta 版本发布,终版 API 基本定型,贡献者团队搭配 TensorLayer2.0,实现了全套深度强化学习(Deep Reinforcement Learning)算法,包括 DQN 以及一系列的改进算法,PG、TRPO、PPO 等算法,AC 算法及其一系列改进,最大熵方法和策略/值迭代等方法。他们也承诺,将持续开源最新深度学习和深度强化学习算法。
目前,贡献者团队与硬件开源社区 Sipeed 合作,将推出基于国产 K210 嵌入式 AI 芯片模组及其模型转换器。届时,TensorLayer 中的所有案例和模型都将可以直接导入芯片中,成本能控制在 20 元以下。他们已经做出了实时目标识别、人脸识别、风格转换等的 demo。
对于在 TensorLayer 的开发与更新这三年中的体会,董豪对雷锋网表示,这是一个不断结识新朋友,自我学习的过程。「能学到很多工程上的东西,也会遇到各种各样的需求。开发者提出来之后,我就知道,哇,原来世界上还有这种算法。当然,也会认识许多国内国外的朋友,其中有很多很有意思的人。我们做的事情是开源,所以接触到的很多人都极具贡献精神。」
董豪还提到,TensorLayer 也创造了很多促进个人事业的机会,比如有一些大公司找到他,开出了在业界极具竞争力的条件。不过他最后还是选择了北京大学,将继续从事科研。社区贡献者也都拿到了 OpenAI, Google Brain, Nvidia Research 等研究机构的 offer。
他将于今年 9 月正式加入北大前沿计算研究中心,该中心在机器学习理论和应用方面都非常强。在未来,他会做一些基于深度学习的理论研究,以及机器学习在视觉、医疗、图形学方面的一些应用,欢迎大家申请博士生和博士后。此外,他对非监督学习也特别感兴趣,计划在数据的高效利用上进行更多探索。我们期待未来他带来更多新的研究,推动 TensorLayer 更多地助益于开发者,创造一个开源、共享的生态。
TensorLayer 部分贡献者
董豪知乎主页:https://www.zhihu.com/people/zsdh123/activities
TensorLayer GitHub 地址:https://github.com/tensorlayer/tensorlayer
雷峰网原创文章,未经授权禁止转载。详情见转载须知。