您的位置:首页 > 互联网

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

发布时间:2017-05-15 17:34:06  来源:互联网     背景:

  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 目前支持的数据类型请在官网查阅:https://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 次,查看结果:

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

  输出结果:

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

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

  参考:

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

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

小米12 什么时候上市


惠普的董事长是谁

荣耀什么时候发布新款平板

比亚迪纯电全系车型搭载刀片电池

返回网站首页

一加官方手机壳

等保2.0时代 长亭科技破题大流量网站Web应用安全保护
吐血推荐!VR专业学生人手必备的VR编辑器,用过都说好…

返回网站首页

本文评论
SharePoint(OneDrive)_微软宣布刷新 OneDrive/SharePoint 文件复制/移动体验
  10 月 3 日消息 据 mspoweruser 报道,微软近期宣布为 OneDrive 和 Sharepoint 提供更新的文件移动/复制体验,并将很快推出。   新的基于对话的体验旨在使移动和复制文...
日期:06-22
网易云音乐黑胶打碟功能上线,支持Remix混音改编制作任何歌曲_网易云音乐怎么设置黑胶唱片
  IT之家9月23日消息,据网易云音乐官方消息,黑胶打碟功能已于iOS全量上线,安卓端即将上线。  官方表示,网易云音乐黑胶打碟是国内首个在线移动端碟机产品,实现了便捷的音乐在...
日期:09-28
荣耀商城将于1月12日正式上线(荣耀商城双十一)
  (原标题:官宣:荣耀商城将于 1 月 12 日正式上线)   1月5日消息 今日上午,荣耀商城官方宣布,荣耀官方自营商城将于 1 月 12 日正式上线,荣耀品牌相关的购物和服务也将迁移...
日期:07-16
realme平板什么时候上市_realme 暗示将推出首款平板电脑,名为 realme pad
  6 月 9 日消息 realme 印度与欧洲首席营销官(CMO)发布推特,询问网友“realme pad,这个名字怎么样”,暗示将推出 realme 首款平板电脑。   realme 上个月还在海外社区发...
日期:02-16
youtube视频付费推广_YouTube计划推出流媒体视频在线商店服务
8月15日消息,据报道,近日,Alphabet旗下YouTube正计划推出其流媒体视频在线商店服务。   知情人士称,YouTube已重新与娱乐公司就参与该平台进行谈判,这一平台在YouTube被称为“...
日期:08-17
消息称索尼计划投资数十亿美元在日本熊本县建新厂以提高智能手机传感器产量
  IT之家12月16日消息,据日本经济新闻周四报道,索尼集团公司正在考虑在日本熊本县建立一家新工厂来生产智能手机图像传感器。  报告称,该公司计划最快在2024年在该工厂破土...
日期:12-16
喜马拉雅FM听书报告:优质内容吸引着更多用户!_喜马拉雅fm产品分析报告
不停止对精神世界的探求,你的人生就不会止步不前,书籍承载在文明的内核,在今年的世界读书日,喜马拉雅推出的一系类的听书课程,引导用户进一步拓宽精神世界,同时,喜马拉雅还发出了...
日期:05-07
美团大跌后腾讯辟谣清仓,今年已遭沈南鹏8次减持「沈南鹏美团占股」
  作者:陆涵之;;责编:宁佳彦  8月16日,有消息称,腾讯控股(00700.HK)将出售美团(03690.HK)股票,对此腾讯集团市场与公关部总经理张军进行了辟谣。今日港股,包括美团在内的腾讯系股...
日期:09-28
促进团购健康发展窝窝团引领行业革新
    “团购”是一种新兴的电子商务模式,在我国发展的时间较短。因此,不仅需要通过国家商务部流通司的引导和监管,帮助团购企业提高管理水平和核心竞争力的同时,也需要领先企...
日期:07-23
设计理念超前!MAXHUB 会议平板获日本Good Design和德国iF双料设计大奖
  智能办公时代,办公设备不仅要能提升办公效率,更要体现对员工的人性关怀,激发员工的创造力,而先后获得日本Good Design 设计奖和德国 iF设计奖的MAXHUB V5旋转版就做到...
日期:07-15
更美App深抓年轻消费者心智,AI助力审美革新(更美app颜值报告)
  随着市场的发展,医美市场伴随着颜值时代成长起来,同时也是近些年发展迅猛的行业之一。而更美App在后疫情时代,紧抓市场机遇,业绩直线上升,成为年轻一点消费者的品质之...
日期:07-14
索尼网络攻击事件_黑客出庭受审 否认攻击索尼影业网站
  10月18日早间消息,黑客组织LulzSec的一名成员周一否认参与对索尼影业计算机的攻击。这名LulzSec的黑客现年23岁,名为科迪·克雷琴格(Cody Kretsinger)。在美国洛杉矶地区...
日期:07-24
熟人社交越来越受限,Soul 打造全新线上社交体验_soul交友
  随着社交群体需求的增多,社交市场也正面临着一大挑战。在熟人关系链泛化的过程中,用户在微信的互动渐渐受到心理限制,熟人间可分享的小秘密体量开始减少,越来越多的人开始...
日期:07-14
比特币价格再次跌破2万美元 和去年3月相比下跌58.9%「比特币价格下跌了吗」
9月19日 消息:比特币价格又跌了!美国时间周日,比特币价格下跌至19804美元,与上一个交易日结束时相比价格下跌310美元。根据报价平台CoinDesk的数据,北京时间9月19日8时20分,比特...
日期:09-28
马斯克:特斯拉人形机器人不会成为电影里终结者的样子「特斯拉机器人毁灭人类」
10月1日消息,特斯拉2022AIDay上,特斯拉人形机器人擎天柱Optimus原型机正式亮相。特斯拉CEO埃隆·马斯克展示了“擎天柱”机器人准备投产的版本,并预计这款人形机器人售价每台低...
日期:10-04
曝苹果自研基带不顺,下代仍采用高通 5G 芯片,最早 iPhone16 搭载自研基带
2022 年 12 月 22 日消息,根据 DigiTimes 报道,苹果 iPhone 15 系列将继续采用高通 5G 调制解调器(基带芯片),因为苹果公司仍在继续开发自有的 5G 定制芯片。在日前高通发布的财...
日期:12-23
2020年10月百度在上海推出自动驾驶体验服务「百度萝卜快跑将于上海自动驾驶示范体验区启动全无人测试」
9月28日 消息:日前,百度正式在上海嘉定区启动“无人之境”自动驾驶示范体验区,旗下自动驾驶出行服务平台萝卜快跑开启自动驾驶全无人测试。这是上海推动智能网联汽车创新发展...
日期:09-29
插画师用ai还是ps「我一个插画师给AI打下手,月入3千」
声明:本文来自于微信公众号量子位(ID:QbitAI),作者:杨净 萧箫,授权转载发布。AI生成厉害到什么程度?现在人类已经在为它打下手了。据一位画手网友分享,他们圈子里已经诞生了全新...
日期:10-10
快手打击帐号买卖行为 累计处罚7.43万个违规帐号_您的快手账号因涉及违规行为已被处理
10月9日 消息:今日,快手发布关于打击帐号买卖行为的专项治理公告第六期内容,2月至今已累计处罚7.43万个买卖帐号。大疆osmo 4和苹果12promax公告称,在日常审核中平台发现,部分帐...
日期:10-16
OPPO手表官宣双擎架构,网友:华米科技Amazfit不是早就有了吗
  3月6日,OPPO在线上发布会上推出了旗下首款智能手表OPPO Watch,搭载1.91英寸双曲面柔性屏幕,内置多款表盘,支持运动监测和eSIM功能,还采用了“双擎动力续航架构”。   据...
日期:12-02