深度学习开源框架PaddlePaddle发布新版API,简化深度学习编程

【新智元导读】 本文来自百度PaddlePaddle团队成员骆涛,他在文章中介绍了百度深度学习开源框架Paddlepaddle新推出的API,它们能更好地支持分布式作业,有效减少程序代码量,提供包括reader、reader-creator和reader-decorator的组合式概念,使数据操作可以反复起效。同时推出的还有新书《深度学习入门教程》,文内附免费获取地址。

PaddlePaddle是百度于2016年9月开源的一款分布式深度学习平台,为百度内部多项产品提供深度学习算法支持。为了使PaddlePaddle更加易用,我们已经做了一系列的工作,包括使用Kubernetes集群管理系统来进行部署与运行。

今天,我们很高兴地发布新API的Alpha版0.10.0rc1,以及《深度学习入门教程》。目前教程包括八个示例程序,均可以在Jupyter Notebook上运行,即用户可以通过网页浏览文档并运行程序。

使用新API,PaddlePaddle的程序代码将大幅缩短。下图对比展示了一个卷积神经网络在旧API(图左半边)和新API(图右半边)的效果。

新API能达到如此显著的代码简化效果,有以下三个关键的设计思想。

一个新的概念模型

我们的设计原则是:让用户在神经网络中表达和解决实际的问题,并用更加灵活的方式来描述新的深度学习算法。因此,新模型包含以下几部分概念:

  • 模型(model)是一个或多个拓扑结构的组合。
  • 拓扑结构(topology)是一系列层的表达式。
  • 层(layer)可以是任何类型的计算函数,包括损失(cost)函数。
  • 有些层有梯度参数,有些层没有,大多数损失函数没有参数。
  • 在一些拓扑结构中,层与层之间共享参数。
  • 对于多个拓扑结构间存在参数共享的情况,PaddlePaddle能自动找出并创建这些参数。

下面,通过两个例子来展示我们的一些设计思想。

层与层之间共享参数

假设我们要学习一个文本词向量f,训练样本是“对查询Q来说,搜索结果A比B更准确”,任务目标是:sim(f(A), f(Q)) > sim(f(B), f(Q)),也就是f(A)和f(Q)的相似度,大于f(B)和f(Q)的相似度。为了学习f,我们构建了一个三分支的网络结构:

这里的模型实际上是x -> f,但我们需要重复三次来学习f,以下伪代码展示了如何构建这样一个模型:

拓扑结构之间共享参数

假设GAN模型包含两个拓扑结构d0和d1,d0和d1之间共享了参数。因此在训练过程中,更新一个拓扑结构的参数时可能需要同时更新另一个。如果使用旧API,用户将不得不访问非常底层的API,这部分API接口通常相对晦涩,且文档不全。而使用新API,GAN模型仅需几十行即可,伪代码如下:

可组合的数据加载模块

在工业届的AI应用中,数据加载部分通常需要大量的源代码。为了减轻用户的这部分工作量,新API的数据接口设计包含几个部分:

  • reader:从本地、网络、分布式文件系统等读取数据,也可随机生成数据,并返回一个或多个数据项。
  • reader creator:一个返回reader的函数。
  • reader decorator:装饰器,可组合一个或多个reader
  • batch reader:与reader类似,但可批量返回一个或多个数据项。

下面展示了一个随机生成数据,并返回单个数据项的reader creator函数:

新API还有助于数据加载操作的复用。例如,我们定义两个reader,分别是impressions()clicks(),前者用于读取搜索引擎的日志流数据,后者用于读取点击流数据;然后,我们可以通过预定义的reader decorator缓存并组合这些数据,再对合并后的数据进行乱序操作:

如果我们希望只使用数据集中的前5000个样本来进行小型实验,代码如下:

此外,我们发布了paddle.datasets包,为教程中的八个示例程序都提供了预定义好的数据加载接口。第一次调用时会自动下载公共数据集并进行预处理,之后的调用则会从本地缓存中自动读取。

更高层次的API

PaddlePaddle是一个诞生在工业界的系统,从一开始就强调支持分布式训练。但在编写分布式程序时,旧API暴露了很多用户不需要知道的细节。另外,PaddlePaddle的C++代码中的训练过程是一个for循环结构,不能跑在交互式的Jupyter Notebook上。因此,我们发布了新API,提供了一些更高层次的接口,如train(训练接口)、test(测试接口)和infer(应用接口)。这些新API既能在本地运行,将来也支持在Kubernets集群上运行分布式作业。

以上述的三分支模型和GAN模型为例,下面展示traininfer的使用思路。

我们会持续优化新API,上述设计思想的具体实现会在0.10.0版中完成,同时也欢迎您的评论、反馈和代码贡献!

参考文献

1.PaddlePaddle’s New API Simplifies Deep Learning Programs.

2.PaddlePaddle Design Doc.

3.PaddlePaddle Python Data Reader Design Doc.

关于《深度学习入门教程》

这本书脱胎于PaddlePaddle Team的线上教材《深度学习入门》,包括新手入门、识别数字、图像分类、词向量、情感分析、语义角色标注、机器翻译、个性化推荐等内容。

以下是《深度学习入门》一书的目录:

在线阅读:http://book.paddlepaddle.org/index.html

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2017-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

让 TensorFlow 估算器的推断提速百倍,我是怎么做到的?

TensorFlow 估算器提供了一套中阶 API 用于编写、训练与使用机器学习模型,尤其是深度学习模型。在这篇博文中,我们描述了如何通过使用异步执行来避免每次...

20120
来自专栏新智元

Kaggle放大招:简单几步实现海量数据分析及可视化

【新智元导读】近期,Kaggle发布了新的数据分析及可视化工具——Kaggle Kerneler bot,用户只需上传数据集,便可用Python为用户自动获取相...

15830
来自专栏落花落雨不落叶

写了个学习正则的小工具

34560
来自专栏吉浦迅科技

为啥在Matlab上用NVIDIA Titan V训练的速度没有GTX1080快?

在Matlab官方论坛上看到这个帖子,希望给大家带来参考 有一天,有人在Matlab的论坛上发出了求救帖: ? 楼主说: 我想要加快我的神经网络训练,所以把G...

59080
来自专栏人工智能的秘密

用机器学习来预测天气Part 1

  本章是使用机器学习预测天气系列教程的第一部分,使用Python和机器学习来构建模型,根据从Weather Underground收集的数据来预测天气温度。该...

45090
来自专栏新智元

【深度学习Github 10万+源代码分析】Python是第三受欢迎语言

【新智元导读】编程语言是软件开发的主要工具。自20世纪40年代以来,已经有数百种语言被发明出来,每天大量的各种语言编写的代码活跃着代码库。本文作者从 GitHu...

38380
来自专栏CSDN技术头条

大数据并行计算利器之MPI/OpenMP

1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出来,为不同的连通域填入数字标记,并且...

29260
来自专栏大数据挖掘DT机器学习

Python文本挖掘:基于共现提取《釜山行》人物关系

《釜山行》是一部丧尸灾难片,其人物少、关系简单,非常适合我们学习文本处理。这个项目将介绍共现在关系中的提取,使用python编写代码实现对《釜山行》文本的人物关...

54370
来自专栏AI研习社

运用 MXNet Scala API 接口进行图像分类(附代码)

随着 MXNet 1.2.0 版本的发布,新的 MXNet Scala API 接口也发布了。这次发布的 Scala,里面的推理应用程序致力于优化开发者体验。S...

11610
来自专栏石瞳禅的互联网实验室

【TensorFlow实战——笔记】第1章:TensorFlow基础

TensorFlow是Google公司开源的分布式机器学习框架。它的前身是DistBelief,在Google大规模内部使用。TensorFlow最早由Goog...

14410

扫码关注云+社区

领取腾讯云代金券