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

如何用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小时内处理完毕。


返回网站首页

本文评论
EMUI 9.0 正式开放升级:华为荣耀旗舰机全系不限量
华为官方就表示,11月10日将进行不限量EMUI 9.0的升级,共涉及9款机型。现在,华为EMUI官方正式宣布......
日期:11-11
默认用户加入“激励计划”占带宽 百度网盘道歉:将发新版
4月20日晚间,百度网盘就此前默认PC端用户加入用户激励计划道歉。...
日期:04-21
下载热门应用遭病毒攻击,腾讯手机管家识破木马病毒的“伪装”
此前,常州市警方破获一起利用勒索病毒作案事件,一位00后黑客自学制成勒索木马病毒,攻陷某学校的......
日期:10-26
彭于晏、廖凡演技炸裂上演《邪不压正》 华为视频带你领略姜式“江湖”
&ldquo;枪声响,火车来,四年一剑,姜文回归。&rdquo;历经四年,这部由姜文执导的与复仇有关的新片......
日期:11-26
【知道创宇404实验室】Oracle WebLogic远程命令执行漏洞预警
2019年04月17日,国家信息安全漏洞共享平台(CNVD)官方发布安全公告 http://www.cnvd.org.cn/webinfo......
日期:04-22
Windows 应用兼容层 Wine 5.14 发布
Wine 5.14 开发版已发布,主要更新如下: &bull; 对控制台支持进行更多的重组操作 ......
日期:08-02
货架革命,如何拿下终端货架高地?
数据显示, 每位消费者在超市每个终端展示货架前平均停留15秒, 75%的人会在5秒......
日期:07-25
告别小“糊”图!精致男女的终极刷图攻略了解一下?
早晚班高峰挤地铁, 不抓紧碎片时间充电怎能称得上当代好青年? 金融时事刷刷刷! ......
日期:11-08
“美人蝎”挖矿木马上演“美人心计” 腾讯电脑管家精准查杀
如今,各种电脑软件中,图片都是极其常见的数据,优美的风景、风姿绰约的美女,在感受视图大餐的同......
日期:09-29
如何能快速盘点固定资产
企业经验者需要时刻了解自身的资产状态及资产价值,固定资产盘点成为了行政及固定资产管理部门的常......
日期:10-22
Darkcomet木马变身“抓鸡狂魔” 腾讯电脑管家精准查杀
窃取用户敏感数据、个人银行账户和密码等信息,或者在设备上执行恶意代码实施进一步的网络攻击活动......
日期:11-09
更懂中国人办公需求,WPS吸引越来越多办公族
&ldquo;目前,WPS全线产品月活用户超过3亿,云文档每天上传文档量超过5亿,各类办公素材下载量每月......
日期:04-04
Win10 设备管理器已不支持通过互联网更新驱动程序
8 月 9 日消息 微软允许用户以多种方式在 Windows 10 上下载、安装或更新驱动程序。用户可以手动更......
日期:08-09
金山办公赋能广西信创 打造基础软件产业标杆
金山办公赋能广西信创 打造基础软件产业标杆 中国基础软硬件产业近期迎来重大政策利好。7月27日,国务院正式发布《新时...
日期:08-07
新Edge浏览器简化网址显示:默认隐藏http://www
微软新Edge浏览器推出后得到好评,因为Canary/Dev等预览通道的出现,其软件更新速度也很快。...
日期:07-15
Mozilla Firefox在冠状病毒爆发期间重新启用TLS 1.0和1.1
本月初发布的Mozilla Firefox 74放弃了对TLS 1.0和1.1的支持,以鼓励向更安全的系统过渡,但是现在......
日期:03-23
微软推送Windows 10 19H1快速预览版18290系统更新
11月29日消息 微软今日推送了Windows 10 19H1预览版18290系统更新,本次是面向快速预览版通道(Fast ......
日期:11-29
傲游浏览器6支持区块链 官方释疑:不影响性能与安全
一周前,傲游美国公司结束历时7个月的封闭开发,傲游6浏览器的第一个正式Alpha版本打包完成(暂未公......
日期:03-19
海豚导图:逻辑思维能力将影响孩子一生
&ldquo;不辅导作业母慈子孝,一写作业鸡飞狗跳&rdquo;;不辅导作业血压正常,一辅导作业就变高血压;自......
日期:09-23
别再用了:微软敦促Windows 7用户升级的全屏警告长这样
12月14日消息 2020年1月14日,于2009年发行的Windows 7系统将正式停止支持。微软当然不希望用户继续......
日期:12-14