深度学习框架paddlepaddle的简单使用
一、深度学习框架简介
tensorflow | Python/C | 机器智能开源软件库主要用于工业 | |
pytorch | Python | 一个开源的Python机器学习库主要用于学术界 | |
caffe | BVLC | C /Python | 老牌深度学习框架 |
paddlepaddle | 百度 | C /Python | 源于产业实践的开源深度学习平台 |
keras | Fran?ois Chollet 等 | Python | 作为Tensorflow、Microsoft-CNTK和Theano高级应用程序接口 |
MXNet | 亚马逊 | Python/C /matlab | 致力于提供兼顾性能和灵活性的深度 学习框架 |
CNTK | 微软 | C | 语音和图像识别能力较好 |
二、Python简介
2.1 Python的安装过程
1.去官网下载稳定版。Python3.7.7(Windows版本)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9x3otqYy-161933938505paddlepaddle的简单使用.assets/image-20200422102046371.png)]
2.安装Python(勾选添加到环境变量)Customize installation
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-x8pkmajc-161933938510paddlepaddle的简单使用.assets/20200422220000.png)]
3.点击Next
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-nUJKVf8f-161933938516paddlepaddle的简单使用.assets/20200422220014.png)]
4.选择安装路径(非系统盘)
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-4W3Xu6UL-161933938518paddlepaddle的简单使用.assets/20200422220101.png)]
5.添加到环境变量(未勾选)Add Python to PATH处理),右击计算机,选择属性
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-wZuiJMUD-16193393851paddlepaddle的简单使用.assets/20200422220440.png)]
6.选择高级系统设置
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-Snq85Rww-16193393852paddlepaddle的简单使用.assets/20200422220453.png)]
7.选择环境变量
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-CmNCdmZP-16193393854paddlepaddle的简单使用.assets/20200422220509.png)]
8.将Python添加安装路径PATH的值中,PATH其中,值如下所示C:\develop\Python\Python37是Python根目录的安装
PATH值:
C:\develop\Python\Python37\Scripts\;C:\develop\Python\Python37\;
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-3Kjva3ql-16193393856paddlepaddle的简单使用.assets/20200422220546.png)]
9.验证安装是否成功
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-2E22kHNk-161933938528paddlepaddle的简单使用.assets/20200422222651.png)]
10.更新pip至最新版本
python -m pip install --upgrade pip
2.2 Python简介
,因此,在执行程序之前,必须将程序员写的程序语言翻译成机器语言。
有两种方法可以翻译编译器:一种是,另外一个是。两种方法的区别在于。当编译器,也称之为,Python编译器以解释的方式运行,因此Python它是一种解释性语言。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-FhHvVFRI-16193393840paddlepaddle的简单使用.assets/001_对比编译和解释语言.png)]
- :程序在执行前需要一个特殊的编译过程,将程序编译成机器语言文件,直接使用编译结果。程序执行效率高,依赖编译器,跨平台性差。 C、C
- :解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行
2.3 Python 特点
- Python 是
- 、、、都是对象,
- 全力支持继承、重载、多重继承
- 支持重载运算符和泛型设计l>
- Python ,Python 语言的核心只包含 、、、、 等常见类型和函数,而由 Python 标准库提供了 、、、、、 等额外的功能
- Python 社区提供了,使用方式与标准库类似。它们的功能覆盖 、、、、、 多个领域
三、Python 的 IDE -PyCharm
3.1 集成开发环境(IDE)
集成开发环境(IDE
,Integrated Development Environment)—— ,一般包括以下工具:
- 图形用户界面
- 代码编辑器(支持 /)
- 编译器/解释器
- 调试器(/)
- ……
3.2 PyCharm 介绍
PyCharm
是 Python 的一款非常优秀的集成开发环境PyCharm
除了具有一般 IDE 所必备功能外,还可以在Windows
、Linux
、macOS
下使用PyCharm
适合开发大型项目- 一个项目通常会包含
- 每个 的代码行数是有限的,通常在几百行之内
- 每个 各司其职,共同完成复杂的业务功能
3.3 PyCharm安装过程
1.去PyCharm官网下载PyCharm(PyCharm下载地址),下载社区免费版即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1xEbyj4-1619333938550)(深度学习框架paddlepaddle的简单使用.assets/image-20200422142125161.png)]
2.安装PyCharm,选择安装路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OS1iQDQ5-1619333938552)(深度学习框架paddlepaddle的简单使用.assets/20200422225434.png)]
3.全部勾选,点击Next
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tl6qH61c-1619333938554)(深度学习框架paddlepaddle的简单使用.assets/20200422225933.png)]
4.点击Install
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvauZPnS-1619333938557)(深度学习框架paddlepaddle的简单使用.assets/20200422225942.png)]
3.4 PyCharm的初始设置
3.5 在PyCharm中创建Python项目
方式一:New Project
1.选择File->New Project
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MJig4L5H-1619333938564)(深度学习框架paddlepaddle的简单使用.assets/image-20200422235000341.png)]
2.选好项目的位置,点击下方的侧三角
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k54l8GwF-1619333938568)(深度学习框架paddlepaddle的简单使用.assets/image-20200422235133651.png)]
3.按顺序点击
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JF93JhQf-1619333938570)(深度学习框架paddlepaddle的简单使用.assets/image-20200422235232446.png)]
4.按顺序点击
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3gRqq1m-1619333938572)(深度学习框架paddlepaddle的简单使用.assets/image-20200422235323191.png)]
5.选择Python的安装路径下的pytho.exe
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ffMdnfl-1619333938576)(深度学习框架paddlepaddle的简单使用.assets/image-20200422235435893.png)]
方式二:Open
直接打开一个文件夹作为项目的根目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z04Uf09y-1619333938580)(深度学习框架paddlepaddle的简单使用.assets\20200426141818.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFZbT3tY-1619333938583)(深度学习框架paddlepaddle的简单使用.assets\20200426141841.png)]
为当前项目选择解释器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-niuTfPXv-1619333938585)(深度学习框架paddlepaddle的简单使用.assets\20200426143759.png)]
3.6 PyCharm 项目布局
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qb8Tgv6b-1619333938587)(深度学习框架paddlepaddle的简单使用.assets/001_PyCharm的界面结构.png)]
- 能够 // 项目文件
- 能够 当前打开的文件
- 能够:
- 输出程序执行内容
- 跟踪调试代码的执行
四、Python的使用
4.1 Python的缩进规则
Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c++有很大的不同(传统的c/c++使用花括号花括号{}符决定作用域的范围;Python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。
4.2 Python的简单使用
4.2.1 注释
C语言程序都必须有一个且只能有一个 main()函数,python直接可以从上至下运行,无需入口函数。
print("hello Python!")#打印hello Python!
print("hello World!")#打印hello World!
4.2.2 变量
- 在 Python 中,每个变量 在,变量 赋值以后 该变量 才会被创建
- 等号(=)用来给变量赋值
=
左边是一个变量名=
右边是存储在变量中的值
#变量名 = 值
a = 3
在 Python
中定义变量是 (在其他很多高级语言中都需要),数据类型可以分为 和
-
- 整型 (
int
) - 浮点型(
float
) - 布尔型(
bool
)- 真
True
非 0 数
—— - 假
False
0
- 真
- 复数型 (
complex
)- 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
- 整型 (
-
- 字符串(str)
- 列表(list)
- 元组(tuple)
- 字典(dict)
使用 type
函数可以查看一个变量的类型
a = 3.0
print(type(a))#<class 'float'>
4.2.3 运算符
- 是完成基本的算术运算使用的符号,用来处理四则运算
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 |
% | 取余数 | 返回除法的余数 9 % 2 = 1 |
** | 幂 | 又称次方、乘方,2 ** 3 = 8 |
- 在 Python 中
*
运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
print("-" * 50)#'----------------------------------------'
运算符 | 描述 |
---|---|
== | 检查两个操作数的值是否 ,如果是,则条件成立,返回 True |
!= | 检查两个操作数的值是否 ,如果是,则条件成立,返回 True |
> | 检查左操作数的值是否 右操作数的值,如果是,则条件成立,返回 True |
< | 检查左操作数的值是否 右操作数的值,如果是,则条件成立,返回 True |
>= | 检查左操作数的值是否 右操作数的值,如果是,则条件成立,返回 True |
<= | 检查左操作数的值是否 右操作数的值,如果是,则条件成立,返回 True |
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 只有 x 和 y 的值都为 True,才会返回 True否则只要 x 或者 y 有一个值为 False,就返回 False |
or | x or y | 只要 x 或者 y 有一个值为 True,就返回 True只有 x 和 y 的值都为 False,才会返回 False |
not | not x | 如果 x 为 True,返回 False如果 x 为 False,返回 True |
- 在 Python 中,使用
=
可以给变量赋值 - 在算术运算时,为了简化代码的编写,
Python
还提供了一系列的 与 对应的 - 注意:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
%= | 取 (余数)赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
- 以下表格的算数优先级由高到最低顺序排列
运算符 | 描述 |
---|---|
** | 幂 (最高优先级) |
* / % // | 乘、除、取余数、取整除 |
+ - | 加法、减法 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
not or and | 逻辑运算符 |
4.2.4 循环
主要学习for循环
对比python和c++中的for循环
for i in range(10):
print(i,end="")
#结果:0,1,2,3,4,5,6,7,8,9
for(int i=0;i<10;i++){
cout<<i;
}
#结果:0,1,2,3,4,5,6,7,8,9
4.2.5 函数
def 函数名():
函数封装的代码
……
def
是英文define
的缩写- 应该能够表达 的功能,方便后续的调用
- 的命名应该
- 可以由 、 和 组成
4.2.6 非数字型类型变量的使用
在 Python
中,所有 都支持以下特点:
- 都是一个
sequence
,也可以理解为 -
[]
-
for in
- 、、、
-
+
和*
def test1():
# - 都是一个 ** 序列 ** `sequence`,也可以理解为 ** 容器 **
# - ** 取值 ** `[]`
# - ** 遍历 ** `
# for in `
# - ** 计算长度 **、 ** 最大 / 最小值 **、 ** 比较 **、 ** 删除 **
# - ** 链接 ** `+` 和 ** 重复 ** `*`
# - ** 切片 **
a = []
print(a)
a.append(3)
a.append('xiaoming')
a.clear()
a = [1,2,3,4,5,6]
print(a[3])
print(a[1:3])
b = [7,8,9]
c = a + b
print(c)
print(len(c))
d = []
d.append(a)
d.append(b)
d.append(c)
print(d)
print(len(d))
def testStr():
#字符串拼接
a = 'hello'
b = 'world'
c = a + ',' + b
print(c)#'hello,world'
#字符串分割成字符数组
str1 = 'hello,world,hello,python'
str1_list = str1.split(",")
print(str1_list)#['hello','world','hello','python']
#字符数组拼接成字符串
str2_list = ["It's", 'a', 'Lovely', 'Day', 'Today']
str2 = ' '.join(str2_list)
print(str2)#It's a Lovely Day Today
#字符串的格式化
for i in range(10):
str_format = ("%-"+str(i+1)+"s:line")%(i)
print(str_format)
if __name__== '__main__':
testStr()
def testList():
a = []#定义空列表
a.append(3)#增,[3]
a.append("xiaoming")#增,[3,'xiaoming']
a.pop(1)#删,[3]
a.append('xiaoming')#增,[3,'xiaoming']
a[1]='xiaohong'#改,[3,'xiaohong']
#查,查询a中所有的元素并打印
for data in a:
print(data)
if __name__=='__main__':
testList()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlbrxMyk-1619333938588)(深度学习框架paddlepaddle的简单使用.assets/杨辉三角_1-1587949541718.png)]
分析:
- 设杨辉三角为
pascalTriangle
,行号为i,列号为j - 行号i的取值范围
0~numOfRows-1
,每一行中,列号j的取值范围为0~i
j=0
或i=j
时等于行号的时,值为1
,其它为:pascalTriangle[i-1][j-1]+pascalTriangle[i-1][j]
- 设单位长度为
unitLength
- 第
i
行首元素缩进的规律是(numOfRows-i+1)*unitLength
- 首位元素定位完之后,然后保证每一个元素的打印宽度为
unitLength*2
即可
def isoscelesTriangle(numOfRows,unitLength):
space = " "
star = "*"
for i in range(numOfRows):
#首元素缩进
beginSpace = space*( (numOfRows-i+1) * unitLength )
print( "%s"%( beginSpace ),end="" )
for j in range(i+1):
#字符串拼接+格式化输出
print(("%-"+str(unitLength*2)+"s")%(star),end="")
print("\n")
def printPascalTriangle(numOfRows,unitLength):
space = " "
pascalTriangle = []
for i in range(numOfRows):
pascalTriangle.append([1]*(i+1))
for i in range(numOfRows):
for j in range(i):
if(i!=j) and j!=0:
pascalTriangle[i][j] = pascalTriangle[i - 1][j - 1] + pascalTriangle[i - 1][j]
for i in range(numOfRows):
#首元素缩进
beginSpace = space * ((numOfRows - i + 1) * unitLength)
print("%s" % (beginSpace), end="")
for j in range(i+1):
#字符串拼接+格式化输出
print(("%-" + str(unitLength*2) + "d") % (pascalTriangle[i][j]), end="")
print("\n")
if __name__ == '__main__':
isoscelesTriangle(10,4)
printPascalTriangle(10,4)
4.2.7 文件的读写
**材料:**德国手语数据集的三个文件phoenix2014T.dev.gloss
、phoenix2014T.dev.sign
、phoenix2014T.vocab.gloss
**需求:**将phoenix2014T.dev.gloss
中的gloss标签全部转换成数字标签,然后写入到phoenix2014T.dev.sign
中每个对应的视频的后面,以#
分割
def combineSignAndGloss():
parentPath = 'C:/workspace/PyCharm/PycharmProjects/testPython/txtFile/'
file1 = parentPath + 'phoenix2014T.dev.sign'
file2 = parentPath + 'phoenix2014T.dev.gloss'
file3 = parentPath + 'phoenix2014T.vocab.gloss'
file4 = parentPath + 'phoenix2014T_sign_numLabel.txt'
fo1 = open(file1,'r')
fo2 = open(file2,'r')
fo3 = open(file3,'r')
fw1 = open(file4,'w')
vocabLines = fo3.readlines()
vocabGloss = {
}
for i,v in enumerate(vocabLines):
v = v.strip()
vocabGloss[v] = i
line1 = fo1.readline()
line2 = fo2.readline()
while line1 and line2:
videoPath = line1.strip()
glossLabel = line2.strip()
splitGlossLabel = glossLabel.split(' ')
strNumLabel = []
for l in splitGlossLabel:
if l in vocab_gloss.keys():
strNumLabel.append(str(vocabGloss[l]))
else:
strNumLabel.append(str(vocabGloss['<unk>']))
strNumLabel = " ".join(strNumLabel)
fw1.write("%s#%s\n"%(videoPath,strNumLabel))
line1 = fo1.readline()
line2 = fo2.readline()
if __name__ == '__main__':
combineSignAndGloss()
4.2.8 numpy的使用
Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。
- 高性能科学计算和数据分析的基础包
- ndarray,多维数组(矩阵),具有矢量运算能力,快速、节省空间
- 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
- 线性代数、随机数生成
import numpy as np
import numpy as np
# list序列转换为 ndarray
lis = range(10)
arr = np.array(lis)
print(arr) # ndarray数据
print(arr.ndim) # 维度个数
print(arr.shape) # 维度大小
# list of list嵌套序列转换为ndarray
lis_lis = [range(10), range(10)]
arr = np.array(lis_lis)
print(arr) # ndarray数据
print(arr.ndim) # 维度个数
print(arr.shape) # 维度大小
# 多维数组
arr2 = np.arange(12).reshape(3,4)
print(arr2)
print(arr2[1])
print(arr2[0:2, 2:])
print(arr2[:, 1:3])
五、PaddlePaddle的安装
1.进入PaddlePaddle官网(PaddlePaddle官网),选择好自己的操作系统、安装方式、Python版本、CUDA版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89gxCtVy-1619333938590)(深度学习框架paddlepaddle的简单使用.assets/image-20200422143005597.png)]
2.进入命令行界面,粘贴安装命令(默认安装paddlepaddle的最新版本,如果想安装指定版本可以在安装命令后面加上"==版本号")
1)安装指定版本的命令
python -m pip install paddlepaddle==1.7.1 -i https://mirror.baidu.com/pypi/simple
pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple#使用清华镜像源安装软件的指令
六、PaddlePaddle的使用
1.基本概念
1).Tensor
在神经网络中传递的数据都是Tensor。Tensor可以简单理解成一个多维数组,一般而言可以有任意多的维度。 不同的Tensor可以具有自己的数据类型和形状,同一Tensor中每个元素的数据类型是一样的,Tensor的形状就是Tensor的维度。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jnx0OE6j-1619333938594)(深度学习框架paddlepaddle的简单使用.assets/tensor.jpg)]
2).Operator
在飞桨中,所有对数据的操作都由Operator表示,因为一些常见的对Tensor的操作可能是由更多基础操作构成,为了提高使用的便利性,框架内部对基础 Operator 进行了一些封装,包括创建 Operator 依赖可学习参数,可学习参数的初始化细节等,减少用户重复开发的成本。
3).Program
用户定义Operator会被顺序的放入Program中,最终构成想要的网络结构。
4).Executor
执行器,执行program中定义的运算。
5).place
指定执行器执行时所在的设备。
2.线性回归
- 用给定的样本训练一个线性模型
- 用训练好的模型进行预测
- 本例中训练样本是通过
x = np.linspace(-100, 100, 100)
和y = np.linspace(-100, 100, 100)
产生,x,y是-100~100之间均匀产生的100个数。z=x+y,这是三维空间中的一个平面.
from mpl_toolkits import mplot3d import matplotlib.pyplot as plt import numpy as np import math ax = plt.axes(projection='3d') import paddle.fluid as fluid import paddle.fluid.layers as layers from visualdl import LogWriter def print3Dgraph(): def f(x,y): return x+y #均匀的聪-100~100中产生100个数 x = np.linspace(-100, 100, 100) y