说明

  • 本页面无手机端适配,强制缩放阅读。
  • 使用纯html格式,保存教学用ppt,添加了部分个人笔记。
  • 目录工作正常,可以跳转。

PaddlePaddle概述


background image

PaddlePaddle概述

PaddlePaddle概述

PaddlePaddle简介

为什么要学PaddlePaddle

什么是PaddlePaddle

PaddlePaddle优点

PaddlePaddle缺点

国际竞赛获奖情况

行业应用

课程概览

学习资源


background image




什么是PaddlePaddle

Ø

PaddlePaddle(Parallel Distributed Deep Learning,中文名飞桨)
是百度公司推出的开源、易学习、易使用的分布式深度学习平台

Ø

源于产业实践,在实际中有着优异表现

Ø

支持多种机器学习经典模型


background image




为什么学习PaddlePaddle

Ø

开源、国产

Ø

能更好、更快解工程决实际问题


background image




PaddlePaddle优点

Ø

易用性。语法简洁,API的设计干净清晰

Ø

丰富的模型库。借助于其丰富的模型库,可以非常容易的复现一些经典
方法

Ø

全中文说明文档。首家完整支持中文文档的深度学习平台

Ø

运行速度快。充分利用 GPU 集群的性能,为分布式环境的并行计算进行
加速


background image




PaddlePaddle缺点

Ø

教材少

Ø

学习难度大、曲线陡峭


background image




国际竞赛获奖情况


background image




行业应用


background image




学习资源

Ø

官网

ü

地址:https://www.paddlepaddle.org.cn/

ü

内容:学习指南、文档、API手册

Ø

百度云智学院

ü

地址:http://abcxueyuan.cloud.baidu.com/#/courseDetail?id=14958

ü

内容:教学视频

Ø

AIStudio

ü

地址:https://aistudio.baidu.com/aistudio/projectoverview/public/1

ü

内容:项目案例

体系结构


background image

体系结构

体系结构

体系结构

编译时与执行时

总体架构

三个重要术语

案例1:快速开始


background image




总体架构

组网模块

PythonAPI

服务器预测

服务器预测API

服务器预测RunTime

训练模块

训练RunTime

CPU/GPU集群

模型Program

统一中间表达

统一中间表达优化

移动端预测

移动端预测API

移动端预测RunTime

模型表达与优化


background image




编译与执行过程

1. 用户编写的python程序通过调用 Paddle 提供的算子,向Program 中添加变量
(Tensor)以及对变量的操作(Operators 或者 Layers)
2. 原始Program在框架内部转换为中间描述语言: ProgramDesc
3. Transpiler 接受一段 ProgramDesc ,输出一段变化后的 ProgramDesc ,作为后端 
Executor 最终需要执行的 Program
4. 执行 ProgramDesc 中定义的 Operator(可以类比为程序语言中的指令),在执行
过程中会为 Operator 创建所需的输入输出并进行管理


background image




编译与执行过程(续)


background image




三个重要术语

Ø

Fluid:定义程序执行流程

Ø

Program:对用户来说一个完整的程序

Ø

Executor:执行器,执行程序


background image




案例1:快速开始

基本概念与操作


background image

基本概念与操作

基本概念与操作

基本概念

Layer

张量

Variable

Program

Place

Optimizer

案例2:执行两个张量计算

实现线性回归

程序执行步骤

案例3:编写简单线性回归

Executor

Fluid API结构图

基本概念


background image




张量

• 什么是张量

张量(Tensor): 多维数组或向量,同其它主流深度学习框架一样,
PaddlePaddle使用张量来承载数据


background image




张量(续1)

• 张量示例

灰度图像为二维张量(矩阵),彩色图像为三维张量


background image




LoDTensor

Ø

LoD(Level-of-Detail) Tensor是Paddle的高级特性,是对Tensor的一种
扩充。LoDTensor通过牺牲灵活性来提升训练的效率。

Ø

LoDTensor用来处理变长数据信息,将长度不一致的维度拼接为一个大的
维度,并引入了一个索引数据结构(LoD)来将张量分割成序列。


background image




LoDTensor(续)

Ø

假设一个mini-batch中有3个句子,每个句子中分别包含3个、1个和2个单词,我
们可以用(3+1+2)xD维Tensor 加上一些索引信息来表示这个mini-batch:

Ø

假设存在一个mini-batch中包含3个句子、1个句子和2个句子的文章,每个句子都
由不同数量的单词组成,则这个mini-batch的可以表示为2-Level的LoDTensor:


background image




Layer

Ø

表示一个独立的计算逻辑,通常包含一个或多个operator(操
作),如layers.relu表示ReLU计算;layers.pool2d表示pool操
作。Layer的输入和输出为Variable。


background image




Variable

Ø

表示一个变量,在paddle中,Variable 基本等价于 Tensor 。
Variable进入Layer计算,然后Layer返回Variable。创建变量方式:

Paddle变量

Python变量


background image




Variable(续)

Ø

Paddle 中存在三种 Variable:

ü

模型中的可学习参数:

包括网络权重、偏置,生存期和整个训练任务

一样长。通过 fluid.layers.create_parameter 来创建可学习参数

ü

占位 Variable:

Paddle 中使用 fluid.data 来接收输入数据, 

fluid.data 需要提供输入 Tensor 的形状信息,当遇到无法确定的维度
时,相应维度指定为 None

ü

常量 Variable:

通过 fluid.layers.fill_constant 来实现常量Variable


background image




Program

Ø

Program包含Variable定义的多个变量和Layer定义的多个计算,是
一套完整的计算逻辑。从用户角度来看,Program是顺序、完整执
行的。

program 的作用是存储网络结构,但不存储参数。


background image




Program(续)

Ø

用户完成网络定义后,一段 Paddle 程序中通常存在 2 个 Program

ü

fluid.default_startup_program

:定义了模型参数初始化、优化器参

数初始化、reader初始化等各种操作。该program可以由框架自动生成,
使用时无需显式地创建

ü

fluid.default_main_program 

:定义了神经网络模型,前向反向计算,

以及模型参数更新、优化器参数更新等各种操作


background image




Scope

Ø

scope 在 paddle 里可以看作变量空间,存储fluid创建的变量。变量
存储于unordered_map 数据结构中,该结构类似于python中的dict,
键是变量的名字,值是变量的指针。

Ø

一 个 p a d d l e 程 序 有 一 个 默 认 的 全 局 s c o p e ( 可 以 通 过
fluid.global_scope() 获取)。如果没有主动创建 scope 并且通过 
fluid.scope_guard() 替换当前 scope,那么所有参数都在全局 scope 
中。

参数创建的时机不是在组网时,而是在 executor.run() 执行时。

Ø

 program 和 scope 配合,才能表达完整模型(模型=网络结构+参数)


background image




Executor

Ø

Executor用来接收并执行Program,会一次执行Program中定义的
所有计算。通过feed来传入参数,通过fetch_list来获取执行结果。


background image




Place

Ø

PaddlePaddle可以运行在Intel CPU,Nvidia GPU,ARM CPU和更
多嵌入式设备上,可以通过Place用来指定执行的设备(CPU或
GPU)。


background image




Optimizer

Ø

优化器,用于优化网络,一般用来对损失函数做梯度下降优化,从而
求得最小损失值


background image




案例2:执行两个张量计算


background image




程序执行步骤

定义

loss

优化

/


background image




案例3:编写简单线性回归

Ø

任务:

ü

给出输入样本

ü

给出实际输出样本

ü

找出 

y = wx+b

 公式中的 

 

b

Ø

思路:

ü

定义输入数据、实际输出结果

ü

将数据送入神经网络进行训练(全连接网络,即分类器)

ü

根据实际输出、预测输出之间的损失值,进行梯度下降,直到收敛到极小值为止


background image




案例3:编写简单线性回归(续)

Ø

技术要点:

ü

神经网络,选择 

fluid.layers.fc( )

,该函数在神经网络中建立一个全连接层。接收

多个输入,为每个输入分配一个权重w, 并维护一个偏置值b;预测时产生一个输出

ü

损 失 函 数 : 回 归 问 题 , 选 择 均 方 差

 

f l u i d . l a y e r s .

s q u a r e _ e r r o r _ c o s t 和

 

fluid.layers.mean( )

作为损失函数

ü

优化器:随机梯度下降优化器 

fluild.SGD

,做梯度下降计算

代码见:simple_lr.py


background image




fluid API结构图

数据准备


background image

数据准备

数据准备

数据准备

案例4:使用reader

什么是数据准备

为什么需要数据准备

实现多元回归

数据集及任务

思路

执行结果

案例5:波士顿房价预测


background image




深度学习数据读取要求

Ø

从文件读入数据。

因为程序无法保存大量数据,数据一般保存到文

件中,所以需要单独的数据读取操作

Ø

批量快速读入。

深度学习样本数据量较大,需要快速、高效读取

(批量读取模式)

Ø

随机读入。

为了提高模型泛化能力,有时需要随机读取数据(随机

读取模式)


background image




案例4:使用reader

Ø

自定义reader creator,从文本文件test.txt中读取一行数据


background image




案例4:使用reader(续1)

Ø

从上一个reader中以随机方式读取数据


background image




案例4:使用reader(续2)

Ø

从上一个随机读取器中,分批次读取数据

实现多元回归


background image




数据集及任务

Ø

数据集介绍

ü

数据量:506笔

ü

特征数量:13个(见
右图)

ü

标签:价格中位数

Ø

任务:根据样本数据,
预测房价中位数(回归
问题)


background image




思路

数据准备

搭建网络

模型训练、评估

模型预测

使用reader对象,随机、批量读取数据样本
两个reader分别读取训练、测试样本

使用全连接网络模型,输入为13个特征值
输出为一个预测价格中位数

均方差损失函数(回归问题)
使用随机梯度下降优化器优化
训练迭代N轮

加载模型,喂入测试数据
进行测试

代码见:linear_regression.py


background image




执行结果

损失函数收敛过程

预测值与实际值对比


background image




案例5:波士顿房价预测

Ø

全部代码见:uci_housing.py


background image

今日总结

• PaddlePaddle体系结构与基本概念

– Tensor, Layer, Program, Variable, Executor,Place
– Fluid API组织结构 

• 案例:

– 简单线性回归
– 机器学习经典案例:波士顿房价预测