Python 全栈体系【四阶】(三十一)

news2025/1/16 3:40:13

第五章 深度学习

五、PaddlePaddle 基础

请添加图片描述

1. PaddlePaddle 简介

1.1 什么是 PaddlePaddle

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

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

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

在这里插入图片描述

1.2 为什么学习 PaddlePaddle

开源、国产

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

1.3 PaddlePaddle 优点

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

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

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

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

1.4 PaddlePaddle 缺点

教材少

学习难度大、曲线陡峭

1.5 国际竞赛获奖情况

请添加图片描述

1.6 行业应用

在这里插入图片描述

1.7 学习资源

官网

  • 地址:https://www.paddlepaddle.org.cn/
  • 内容:学习指南、文档、API 手册

百度云智学院

  • 地址:http://abcxueyuan.cloud.baidu.com/#/courseDetail?id=14958
  • 内容:教学视频

AIStudio

  • 地址:https://aistudio.baidu.com/aistudio/projectoverview/public/1
  • 内容:项目案例

2. 体系结构

请添加图片描述

2.1 总体架构

请添加图片描述

2.2 编译与执行过程

用户编写的 python 程序通过调用 Paddle 提供的算子,向 Program 中添加变量(Tensor)以及对变量的操作(Operators 或者 Layers)

原始 Program 在框架内部转换为中间描述语言: ProgramDesc

Transpiler 接受一段 ProgramDesc ,输出一段变化后的 ProgramDesc ,作为后端 Executor 最终需要执行的 Program

执行 ProgramDesc 中定义的 Operator(可以类比为程序语言中的指令),在执行过程中会为 Operator 创建所需的输入输出并进行管理

请添加图片描述

2.3 三个重要术语

Fluid:定义程序执行流程

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

Executor:执行器,执行程序

2.4 案例 1:快速开始

在这里插入图片描述
请添加图片描述

3. 基本概念

3.1 张量
3.1.1 什么是张量

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

3.1.2 张量示例

灰度图像为二维张量(矩阵),彩色图像为三维张量
请添加图片描述

3.2 LoDTensor

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

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

假设一个 mini-batch 中有 3 个句子,每个句子中分别包含 3 个、1 个和 2 个单词,我们可以用(3+1+2)xD 维 Tensor 加上一些索引信息来表示这个 mini-batch:
在这里插入图片描述
假设存在一个 mini-batch 中包含 3 个句子、1 个句子和 2 个句子的文章,每个句子都由不同数量的单词组成,则这个 mini-batch 的可以表示为 2-Level 的 LoDTensor:
在这里插入图片描述

3.3 Layer

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

3.4 Variable

表示一个变量,在 paddle 中,Variable 基本等价于 Tensor 。
Variable 进入 Layer 计算,然后 Layer 返回 Variable。创建变量方式:
请添加图片描述
Paddle 中存在三种 Variable:

  • 模型中的可学习参数:包括网络权重、偏置,生存期和整个训练任务一样长。通过 fluid.layers.create_parameter 来创建可学习参数
  • 占位 Variable:Paddle 中使用 fluid.data 来接收输入数据,
    fluid.data 需要提供输入 Tensor 的形状信息,当遇到无法确定的维度时,相应维度指定为 None
  • 常量 Variable:通过 fluid.layers.fill_constant 来实现常量 Variable
3.5 Program

Program 包含 Variable 定义的多个变量和 Layer 定义的多个计算,是一套完整的计算逻辑。从用户角度来看,Program 是顺序、完整执行的。program 的作用是存储网络结构,但不存储参数。
在这里插入图片描述
用户完成网络定义后,一段 Paddle 程序中通常存在 2 个 Program

  • fluid.default_startup_program:定义了模型参数初始化、优化器参数初始化、reader 初始化等各种操作。该 program 可以由框架自动生成,使用时无需显式地创建
  • fluid.default_main_program:定义了神经网络模型,前向反向计算,以及模型参数更新、优化器参数更新等各种操作
3.6 Scope

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

一 个 paddle 程序有一个默认的全局 scope (可以通过fluid.global_scope() 获取)。如果没有主动创建 scope 并且通过fluid.scope_guard() 替换当前 scope,那么所有参数都在全局 scope 中。参数创建的时机不是在组网时,而是在 executor.run() 执行时。

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

3.7 Executor

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

在这里插入图片描述

3.8 Place

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

3.9 Optimizer

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

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

在这里插入图片描述

3.11 程序执行步骤

请添加图片描述

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

任务:

  • 给出输入样本
  • 给出实际输出样本
  • 找出 y = wx+b 公式中的 wb

思路:

  • 定义输入数据、实际输出结果
  • 将数据送入神经网络进行训练(全连接网络,即分类器)
  • 根据实际输出、预测输出之间的损失值,进行梯度下降,直到收敛到极小值为止
    在这里插入图片描述

技术要点:

  • 神经网络,选择 fluid.layers.fc(),该函数在神经网络中建立一个全连接层。接收多个输入,为每个输入分配一个权重 w, 并维护一个偏置值 b;预测时产生一个输出

  • 损失函数:回归问题,选择均方差 fluid.layers. square_error_cost 和fluid.layers.mean() 作为损失函数

  • 优化器:随机梯度下降优化器 fluild.SGD,做梯度下降计算

# 简单线性回归
import paddle
import paddle.fluid as fluid
import numpy as np
import matplotlib.pyplot as plt

train_data = np.array([[0.5], [0.6], [0.8], [1.1], [1.4]]).astype('float32')
y_true = np.array([[5.0], [5.5], [6.0], [6.8], [6.8]]).astype('float32')

# 定义数据数据类型
x = fluid.layers.data(name="x", shape=[1], dtype="float32")
y = fluid.layers.data(name="y", shape=[1], dtype="float32")
# 通过全连接网络进行预测
y_preict = fluid.layers.fc(input=x, size=1, act=None)
# 添加损失函数
cost = fluid.layers.square_error_cost(input=y_preict, label=y)
avg_cost = fluid.layers.mean(cost)  # 求均方差
# 定义优化方法
optimizer = fluid.optimizer.SGD(learning_rate=0.01)
optimizer.minimize(avg_cost)  # 指定最小化均方差值

# 搭建网络
place = fluid.CPUPlace()  # 指定在CPU执行
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())  # 初始化系统参数

# 开始训练, 迭代100次
costs = []
iters = []
values = []
params = {"x": train_data, "y": y_true}
for i in range(200):
    outs = exe.run(feed=params, fetch_list=[y_preict.name, avg_cost.name])
    iters.append(i)  # 迭代次数
    costs.append(outs[1][0])  # 损失值
    print("i:", i, " cost:", outs[1][0])

# 线性模型可视化
tmp = np.random.rand(10, 1)  # 生成10行1列的均匀随机数组
tmp = tmp * 2  # 范围放大到0~2之间
tmp.sort(axis=0)  # 排序
x_test = np.array(tmp).astype("float32")
params = {"x": x_test, "y": x_test}  # y参数不参加计算,只需传一个参数避免报错
y_out = exe.run(feed=params, fetch_list=[y_preict.name])  # 预测
y_test = y_out[0]

# 损失函数可视化
plt.figure("Trainging")
plt.title("Training Cost", fontsize=24)
plt.xlabel("Iter", fontsize=14)
plt.ylabel("Cost", fontsize=14)
plt.plot(iters, costs, color="red", label="Training Cost")  # 绘制损失函数曲线
plt.grid()  # 绘制网格线
plt.savefig("train.png")  # 保存图片

# 线性模型可视化
plt.figure("Inference")
plt.title("Linear Regression", fontsize=24)
plt.plot(x_test, y_test, color="red", label="inference")  # 绘制模型线条
plt.scatter(train_data, y_true)  # 原始样本散点图

plt.legend()
plt.grid()  # 绘制网格线
plt.savefig("infer.png")  # 保存图片
plt.show()  # 显示图片
3.13 fluid API 结构图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基本语法(基础部分)

Java基本语法 文章目录 Java基本语法前言一、准备工作1.1 计算机软件与硬件1.2 计算机编程语言1.3 Java语言概述&程序分析1.4 Java环境搭建&Java API1.5 Java核心机制JVM 二、变量2.1 关键字&标识符2.2 变量2.3 数据类型(基本数据类型)2.3.1 基本数据类型2.3.2 基本…

【ONE·基础算法 || 递归 二叉树深搜】

总言 主要内容:编程题举例,熟悉理解递归类题型,进一步加深理解深搜,引入回溯和剪枝相关概念。       1、递归 1)、递归   实际在学习语言中我们对其有一定涉及。这里,若从宏观视角看待递归的过程&am…

30个数据工程中最常用的Python库(下)

六、数据解析和ETL库 库:beautifulsoup4 数据工程并不总是意味着从数据存储和仓库中获取数据。通常,数据需要从非结构化的来源(如网络或文档等)中提取出来。Beautiful Soup是一个库,它可以轻松地从网页上抓取信息。它…

互联网营销两大宗师:周鸿祎和雷军做个人IP有什么不同?

前几天周鸿祎说要把自己的迈巴赫卖了,准备换国产新能源,还喊话让各个车企给他送车去体验。不少车企都送去了自己的最新车型,只有雷军直接回答,“等SUV出”。我们是在吃瓜,作者却是从中看到了新老营销宗师的手法不同。 最近,在纪念互联网30周年的座谈会上,发生了一件趣事…

高级控件4:Spinner

Spinner下拉列表组件 主要集合ArrayAdapter、SimpleAdapter以及自定义的Adapter(继承自BaseAdapter)配合使用实现下拉选择或者对话框中选择某一条目。下拉使用的更多,所以,接下来的案例也会重在演示下拉效果。 本次基本就是上代…

亚马逊运营干货:多账号多店铺防关联技巧

随着亚马逊识别技术的提升,以及政策的加强,不少跨境电商的卖家都面临着多账号多店铺被关联的风险,这个时候,卖家就需要做好相关的防关联措施了,下面这些方法很有效,可以去参考! 亚马逊多账号多…

如何在Windows服务做性能测试(CPU、磁盘、内存)

目录 前言1. 基本知识2. 参数说明 前言 由于需要做一些接口测试,测试是否有真的优化 1. 基本知识 该基本知识主要用来用到Performance Monitor,以下着重介绍下这方面的知识 性能监视器(Performance Monitor):Windo…

VUE的import store from ‘./vuex/store改为‘ import store from ‘./vuex/store.js‘

ERROR Failed to compile with 1 error 下午5:25:40 error in (webpack)-dev-server/client?http://10.18.173.180:8081/sockjs-node Syntax Error: no such file or directory, open D:\4myroom\H…

C++面向对象程序设计 - 运算符重载

函数重载就是对一个已有的函数赋予新的含义,使之实现新的功能。因此一个函数名就可以用来代表不同功能的函数,也就是一名多用。运算符也可以重载,即运算符重载(operator overloading)。 一、运算符重载的方法 运算符重…

DFS与回溯专题:二叉树的最大深度

DFS与回溯专题:二叉树的最大深度 题目链接: 104.二叉树的最大深度 题目描述 代码思路 设置两个变量,max来记录最大值,sum来记录路径的节点数量。利用dfs对二叉树进行搜索,遇到节点,则sum1;遇到叶子节点&…

路由过滤与引入

1、实验拓扑 2、实验要求 1、按照图示配置 IP 地址,R1,R3,R4 上使用 1oopback口模拟业务网段 2、运行 oSPF,各自协议内部互通 3、R1 和 R2 运行 RIPv2,R2,R3和R4在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的业务…

Java web应用性能分析服务端慢之Nginx慢

一般Nginx作为整个应用的入口,即做静态服务器,也做负载均衡、反向代理;同时也因为位置靠前,还可以通过Nginx对于访问的IP、并发数进行相应的限制。在Java web应用性能分析中,Nginx是重要环节,Nginx的性能也…

SpringMvc(2)RequestMapping注解

RequestMapping注解 1 、RequestMapping的作用2、RequestMapping的出现位置3、类上与方法上结合使用4、RequestMapping注解的value属性4.1 value属性的使用4.2 Ant风格的value4.3 value中的占位符(重点) 5、RequestMapping注解的method属性5.2衍生Mappin…

VsCode一直连接不上 timed out

前言 前段时间用VsCode连接远程服务器,正常操作后总是连接不上,折磨了半个多小时,后面才知道原来是服务器设置的问题,故记录一下,防止后面的小伙伴也踩坑。 我使用的是阿里云服务器,如果是使用其他平台服务…

第十四章大数据和数据科学4分

14.1 引言 14.1.3 科学理念 1.数据科学 数据科学将数据挖掘、统计分析和机器学习与数据集成整合,结合数据建模能力,去构建预测模型、探索数据内容模式。 数据科学依赖于: 1)丰富的数据源。具有能够展示隐藏在组织或客户行为中不…

提升效率!微信自动统计数据报表,轻松实现!

在数字化时代,提高工作效率是每个人的追求。下面就给大家分享一个能够自动统计微信号运营数据的神器——个微管理系统,让大家无需手动整理和计算,提高工作效率! 1、好友统计报表 它分为通讯录好友统计、新增好友统计和删除好友统…

Linux进程地址空间及其页表

文章目录 一、引言二、Linux进程地址空间的概念1、进程地址空间定义2、进程地址空间的组成3、进程地址空间与物理内存的关系 三、页表与内存映射1、页表的定义及作用2、页表的缺页中断 三、进程的写时拷贝 一、引言 在Linux中,进程管理是其核心功能之一&#xff0c…

统一SQL 支持Oracle unpivot列转行

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库:Oracle 目标数据库:TDSQL-MySQL 操作目标 在Oracle中,可以使用unpivot将列转换成行,在TDSQL-MySQL中没有对应的功能,由…

LateX的基础学习

what can i say 在text.tex中写下 \documentclass{article} \begin{document]Hello \LaTeX. \end{document} 关闭记事本,cmd中dir保存,用latex text.tex来编译,可以命令行慢慢编译,这可以做成bat文件 为什么不直接开始在texst…

OSPF认证方式,ISIS简介,ISIS路由器类型

OSPF:转发,泛洪,丢弃