您的位置:首页>>电脑软件

如何用Paddle Fluid API搭建一个简单的神经网络?这里有一份编程指南

发布时间:2019-05-27 17:26:37  来源:互联网    背景:

  PaddlePaddle 是百度自主研发,集深度学习核心框架、工具组件和服务平台为一体的开源深度学习平台。该平台技术领先、功能完备。Paddle Fluid 是 PaddlePaddle 的核心框架,满足模型开发、训练、部署的全流程需求。本文将展示如何用 Paddle Fluid API 编程并搭建一个简单的神经网络。

  那么,Paddle Fluid 有哪些核心概念?如何在 Paddle Fluid 中定义运算过程?如何使用executor 运行 Paddle Fluid 操作?如何从逻辑层对实际问题建模?如何调用 API(层,数据集,损失函数,优化方法等等)呢?

  一、 使用 Tensor 表示数据

  Paddle Fluid 和其它主流框架一样,使用 Tensor 数据结构来承载数据。Tensor 可以简单理解成一个多维数组,一般而言可以有任意多的维度。不同的 Tensor 可以具有自己的数据类型和形状,同一 Tensor 中每个元素的数据类型是一样的,Tensor 的形状就是 Tensor 的维度。

  下图直观地表示 1~6 维的 Tensor:

  在 Paddle Fluid 中存在三种特殊的 Tensor:

  1. 模型中的可学习参数 模型中的可学习参数(包括网络权重、偏置等)生存期和整个训练任务一样长,会接受优化算法的更新,在 Paddle Fluid 中以 Variable 的子类 Parameter 表示。

  在 Paddle Fluid 中可以通过 fluid.layers.create_parameter 来创建可学习参数:

  一般情况下,您不需要自己来创建网络中的可学习参数,Paddle Fluid 为大部分常见的神经网络基本计算模块都提供了封装。以最简单的全连接模型为例,下面的代码片段会直接为全连接层创建连接权值(W)和偏置(bias)两个可学习参数,无需显式地调用 Parameter 相关接口来创建。

  2.输入输出 Tensor :整个神经网络的输入数据也是一个特殊的 Tensor,在这个 Tensor 中,一些维度的大小在定义模型时无法确定(通常包括:batch size,如果 mini-batch 之间数据可变,也会包括图片的宽度和高度等),在定义模型时需要占位。

  Paddle Fluid 中使用 fluid.layers.data 来接收输入数据,fluid.layers.data 需要提供输入 Tensor 的形状信息,当遇到无法确定的维度时,相应维度指定为 None 或 -1,如下面的代码片段所示:

  其中,dtype="int64" 表示有符号 64 位整数数据类型,更多 Paddle Fluid 目前支持的数据类型请在官网查阅:http://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/howto/prepare_data/feeding_data.html#fluid。

  3.常量 Tensor Paddle Fluid 通过 fluid.layers.fill_constant 来实现常量 Tensor,用户可以指定 Tensor 的形状,数据类型和常量值。代码实现如下所示:

  需要注意的是,上述定义的 tensor 并不具有值,它们仅表示将要执行的操作,如您直接打印 data 将会得到描述该 data 的一段信息:

  输出结果:

  具体输出数值将在 Executor 运行时得到,详细过程会在后文展开描述。

  数据传入

  Paddle Fluid 有特定的数据传入方式:

  您需要使用 fluid.layers.data 配置数据输入层,并在 fluid.Executor 或 fluid.ParallelExecutor 中,使用 executor.run(feed=...) 传入训练数据。

  具体的数据准备过程,您可以阅读官网使用指南「准备数据」章节。

  使用 Operator 表示对数据的操作

  在 Paddle Fluid 中,所有对数据的操作都由 Operator 表示,您可以使用内置指令来描述它们的神经网络。为了便于用户使用,在 Python 端,Paddle Fluid 中的 Operator 被一步封装入 paddle.fluid.layers,paddle.fluid.nets 等模块。这是因为一些常见的对 Tensor 的操作可能是由更多基础操作构成,为了提高使用的便利性,框架内部对基础 Operator 进行了一些封装,包括创建 Operator 依赖可学习参数,可学习参数的初始化细节等,减少用户重复开发的成本。例如用户可以利用 paddle.fluid.layers.elementwise_add() 实现两个输入 Tensor 的加法运算:

  输出结果:

  本次运行时,输入 a=7,b=3,得到 outs=10。

  您可以复制这段代码在本地执行,根据指示输入其它数值观察计算结果。

  如果想获取网络执行过程中的 a,b 的具体值,可以将希望查看的变量添加在 fetch_list 中。

  输出结果:

  使用 Program 描述神经网络模型

  Paddle Fluid 不同于其它大部分深度学习框架,去掉了静态计算图的概念,代之以 Program 的形式动态描述计算过程。这种动态的计算描述方式兼具网络结构修改的灵活性和模型搭建的便捷性,在保证性能的同时极大地提高了框架对模型的表达能力。

  开发者的所有 Operator 都将写入 Program,在 Paddle Fluid 内部将自动转化为一种叫作 ProgramDesc 的描述语言,Program 的定义过程就像在写一段通用程序,有开发经验的用户在使用 Paddle Fluid 时,会很自然的将自己的知识迁移过来。

  其中,Paddle Fluid 通过提供顺序、分支和循环三种执行结构的支持,让用户可以通过组合描述任意复杂的模型。

  顺序执行:

  用户可以使用顺序执行的方式搭建网络:

  条件分支——switch、if else:

  Paddle Fluid 中有 switch 和 if-else 类来实现条件选择,用户可以使用这一执行结构在学习率调节器中调整学习率或其它希望的操作:

  关于 Paddle Fluid 中 Program 的详细设计思想,可以参考阅读官网进阶使用「设计思想」中更多 Fluid 中的控制流,可以参考阅读 API 文档。

  使用 Executor 执行 Program

  Paddle Fluid 的设计思想类似于高级编程语言 C++和 JAVA 等。程序的执行过程被分为编译和执行两个阶段。用户完成对 Program 的定义后,Executor 接受这段 Program 并转化为 C++后端真正可执行的 FluidProgram,这一自动完成的过程叫做编译。编译过后需要 Executor 来执行这段编译好的 FluidProgram。例如上文实现的加法运算,当构建好 Program 后,需要创建 Executor,进行初始化 Program 和训练 Program:

  代码实例

  您已经对 Paddle Fluid 核心概念有了初步认识了,不妨尝试配置一个简单的网络吧。如果感兴趣的话可以跟随本部分,完成一个非常简单的数据预测。

  从逻辑层面明确了输入数据格式、模型结构、损失函数以及优化算法后,需要使用 Paddle Fluid 提供的 API 及算子来实现模型逻辑。一个典型的模型主要包含 4 个部分,分别是:输入数据格式定义,模型前向计算逻辑,损失函数以及优化算法。

  1、问题描述 : 给定一组数据 <x,y>,求解出函数 f,使得 y=f(x),其中 X,Y 均为一维张量。最终网络可以依据输入 x,准确预测出 y_predict。

  2、定义数据 : 假设输入数据 X=[1 2 3 4],Y=[2,4,6,8],在网络中定义:

  3、搭建网络(定义前向计算逻辑) : 接下来需要定义预测值与输入的关系,本次使用一个简单的线性回归函数进行预测:

  这样的网络就可以进行预测了,虽然输出结果只是一组随机数,离预期结果仍相差甚远:

  输出结果:

  4、添加损失函数 : 完成模型搭建后,如何评估预测结果的好坏呢?我们通常在设计的网络中添加损失函数,以计算真实值与预测值的差。在本例中,损失函数采用均方差函数:

  

  输出一轮计算后的预测值和损失函数:

  输出结果:

  可以看到第一轮计算后的损失函数为 9.0,仍有很大的下降空间。

  5、网络优化 确定损失函数后,可以通过前向计算得到损失值,然后通过链式求导法则得到参数的梯度值。获取梯度值后需要更新参数,最简单的算法是随机梯度下降法:w=w−η⋅g,由 fluid.optimizer.SGD 实现:

  让我们的网络训练 100 次,查看结果:

  输出结果:

  可以看到 100 次迭代后,预测值已经非常接近真实值了,损失值也从初始值 9.05 下降到了 0.01。至此,恭喜您!已经成功使用 PaddlePaddle 核心框架 Paddle Fluid 搭建了一个简单网络。如果您还想尝试更多,可以从官网继续阅读相关的文档及更多丰富的模型实例。

  参考:

  PaddlePaddle 项目地址:https://github.com/PaddlePaddle

  PaddlePaddle 官网使用指南地址:http://paddlepaddle.org/documentation/docs/zh/1.4/user_guides/index_cn.html

特别提醒:本网内容转载自其他媒体,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。


返回网站首页 本文来源:互联网

本文评论
友情提示:评论功能暂时关闭,请扫描上方二维码进群交流!
为国产办公应用正名 万兴PDF专家软件评测
近年来,国产办公效率类软件快速崛起,各式各样的办公效率类软件进入职场,但是,就选择一款使用方...
日期:08-21
万兴PDF专家评测:消除PDF文档使用痛点,强大功能终将 成为“爆款”软件
时光荏苒,岁月如梭,转眼间酷热难耐的夏天已经带着一丝不舍向我们挥手道别,而“立秋”...
日期:08-21
CRM进入工作手机时代 讯众通信要进入CRM领域?
最初,销售管理就是填各种表,后来引入销售管理软件,开始信息化管理。有了移动互联网之后,销售管...
日期:08-20
妙笔2.0升级系统不容小觑,快速抓住传播营销新趋势
2019年8月,在蓝色光标AD大会上,妙笔智能公司正式推出了智能撰稿机器人2.0系统。在该系统下,通过"...
日期:08-16
这个 WPS 高效功能,让你轻松制作高水平简历
目前,正值招聘的黄金时期「秋招季」,各大企业的集中招聘正在火热展开。如何能在千百位应聘者中脱...
日期:08-15
听音乐时不想收到语音消息 讯飞输入法语音输入更方便看
近日,微博#用手机听音乐时收到语音消息#这一话题备受关注。相信很多手机听歌收到微信语音时的内心O...
日期:08-09
“轻量化”成趋势,办公OA系统如何选择?
“轻量化”,本是汽车生产技术之一,可以做到保证汽车基本性能的情况下,降低重量提高操...
日期:08-09
索泰发布新款迷你PC:搭载9代酷睿和RTX显卡
8月8日消息 索泰今天发布了MAGNUS E系列ZBOX迷你PC,62.2毫米厚,搭载9代英特尔酷睿处理器和NVIDIA ...
日期:08-08
AMD 霄龙发布会现场实拍:双路EPYC,超大被动散热器
8月8日消息 旧金山时间8月7日下午,AMD召开发布会,正式推出了7nm EPYC 7002系列处理器,最高64核12...
日期:08-08
万物互联时代,一款远程控制软件的十年进化之路
远程控制作为一种新兴的互联网操作方式,正在成为一种潮流。
日期:08-07
破解数字化转型的密码  用友2019全球企业服务大会即将揭幕
如今,云计算、大数据、5G、AI人工智能、IoT物联网等新兴技术突飞猛进,已经成为改变生活、产业和社...
日期:08-02
这个高效神器,让你的PPT字体更好看
相信不少小伙伴们都知道,字体对于PPT制作、宣传海报设计而言,重要性不言而喻,字体若是使用得当,...
日期:08-02
迅雷破解版盘点,VIP破解版无限加速去广告统统不靠谱!
提到下载电影、游戏、软件等,相信不少小伙伴都想到迅雷,作为一款装机必备的软件,网上也流传着很...
日期:08-02
十年远控品牌向日葵亮相海纳汇,助力物联网企业数字化
2019年7月20日,海纳汇联盟年度全国巡展第六站在杭州成功举办。
日期:07-29
货架革命,如何拿下终端货架高地?
数据显示,
  每位消费者在超市每个终端展示货架前平均停留15秒,
  75%的人会在5秒...
日期:07-25
简单3步解决文档丢失?试试WPS高效办公小妙招《四》
决定职场人升职加薪的主要因素除老板外,还有你的工作文档。为什么呢?因为这些文档也是你工作成果最...
日期:07-25
科创板开市大涨引股民抢投,腾讯手机管家精准查杀5款病毒炒股APP
近日,科创板鸣锣开市,首批25只新股正式在上交所开始交易,开盘全部大涨,甚至有的涨幅达520%,上...
日期:07-24
有人打电话喊你投资《星球大战9》,腾讯手机管家精准拦截诈骗电话
《星球大战》在全球拥有数以亿计的粉丝,其天行者系列终章《星球大战9》在前段时间宣布12月20日在北...
日期:07-15
二三四五好压防护文件安全 MD5校验成亮点
​二三四五好压自上线以来,因其“小、快、轻、便”的特点,在众多压缩软件中独树一帜。...
日期:07-12
Vue开发者指南:2019你最需要学些什么?
作为 Vue 的初学者,您或许已经听过很多关于它的专业术语了,例如:单页面应用程序、异步组件、服务...
日期:07-08
  专栏介绍
王涵 的专栏
王涵发表的文章
积分:
自我介绍 :