前言
PaddlePaddle
是百度在2016年9月27日开源的一个深度学习框架,也是目前国内唯一一个开源的深度学习框架。PaddlePaddle
在0.11.0版本之后,开始推出Fluid
版本,Fluid
版本相对之前的V2版本,Fluid
的代码结构更加清晰,使用起来更加方便。这本章中我们将会介绍如何使用PaddlePaddle
来计算1+1,选择这个简单的例子主要是为了让读者了解PaddlePaddle
的Fluid
版本的使用,掌握PaddlePaddle
的使用流程。我们讲过介绍如何使用PaddlePaddle
定义一个张量和如何对张量进行计算。
计算常量的1+1
PaddlePaddle
类似一个科学计算库,比如Python
下我们使用的numpy
,提供的大量的计算操作,但是PaddlePaddle
的计算对象是张量。我们下面就编写一个constant_sum.py
Python
文件,使用PaddlePaddle
计算一个[[1, 1], [1, 1]] * [[1, 1], [1, 1]]
。
首先导入PaddlePaddle
库,大部分的API
都在paddle.fluid
下。
import paddle.fluid as fluid
定义两个张量的常量x1
和x2
,并指定它们的形状是[2, 2]
,并赋值为1铺满整个张量,类型为int64
.
# 定义两个张量
x1 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')
x2 = fluid.layers.fill_constant(shape=[2, 2], value=1, dtype='int64')
接着定义一个操作,该计算是将上面两个张量进行加法计算,并返回一个求和的算子。PaddlePaddle
提供了大量的操作,比如加减乘除、三角函数等,读者可以在fluid.layers
找到。
# 将两个张量求和
y1 = fluid.layers.sum(x=[x1, x2])
然后创建一个执行器,可以在这里指定计算使用CPU
或GPU
。当使用CPUPlace()
时使用的是CPU
,如果是CUDAPlace()
使用的是GPU
。
解析器是之后使用它来进行计算的,比如在执行计算之前我们要先执行参数初始化的program
也是要使用到解析器的,因为只有解析器才能执行program
。
# 创建一个使用CPU的执行器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())
最后执行计算,program
的参数值是主程序,不是上一步使用的是初始化参数的程序,program
默认一共有两个,分别是default_startup_program()
和default_main_program()
。fetch_list
参数的值是在解析器在run
之后要输出的值,我们要输出计算加法之后输出结果值。最后计算得到的也是一个张量。
# 进行运算,并把y的结果输出
result = exe.run(program=fluid.default_main_program(),
fetch_list=[y1])
print(result)
输出信息:
[array([[2, 2],
[2, 2]], dtype=int64)]
计算变量的1+1
上面计算的是张量常量的1+1
,并不能随意修改常量的值,所以下面我们要编写一个variable_sum.py
程序文件,使用张量变量作为乘数的程序,类似是一个占位符,等到将要计算时,再把要计算的值添加到占位符中进行计算。
导入PaddlePaddle
库和numpy
的库。
import paddle.fluid as fluid
import numpy as np
定义两个张量,并不指定该张量的形状和值,它们是之后动态赋值的。这里只是指定它们的类型和名字,这个名字是我们之后赋值的关键。
# 定义两个张量
a = fluid.layers.create_tensor(dtype='int64', name='a')
b = fluid.layers.create_tensor(dtype='int64', name='b')
使用同样的方式,定义这个两个张量的加法操作。
# 将两个张量求和
y = fluid.layers.sum(x=[a, b])
这里我们同样是创建一个使用CPU
的执行器,和进行参数初始化。
# 创建一个使用CPU的执行器
place = fluid.CPUPlace()
exe = fluid.executor.Executor(place)
# 进行参数初始化
exe.run(fluid.default_startup_program())
然后使用numpy
创建两个张量值,之后我们要计算的就是这两个值。
# 定义两个要计算的变量
a1 = np.array([3, 2]).astype('int64')
b1 = np.array([1, 1]).astype('int64')
这次exe.run()
的参数有点不一样了,多了一个feed
参数,这个就是要对张量变量进行赋值的。赋值的方式是使用了键值对的格式,key
是定义张量变量是指定的名称,value
就是要传递的值。在fetch_list
参数中,笔者希望把a, b, y
的值都输出来,所以要使用3个变量来接受返回值。
# 进行运算,并把y的结果输出
out_a, out_b, result = exe.run(program=fluid.default_main_program(),
feed={'a': a1, 'b': b1},
fetch_list=[a, b, y])
print(out_a, " + ", out_b," = ", result)
输出信息:
[3 2] + [1 1] = [4 3]
同步到百度AI Studio平台:http://aistudio.baidu.com/aistudio/projectdetail/29339
同步到科赛网K-Lab平台:https://www.kesci.com/home/project/5bf75387954d6e0010668f76
项目代码GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note2
注意: 最新代码以GitHub上的为准
参考资料
http://www.paddlepaddle.org/documentation/api/zh/1.0/layers.html
来源:CSDN
作者:我是天才很好
链接:https://blog.csdn.net/weixin_43593330/article/details/103456987