paddle1.8-官⽅⽂档1-快速上⼿(1)-基本概念paddle1.8-官⽅⽂档1-快速上⼿(1)-基本概念
paddle1.8-官⽅⽂档1-快速上⼿(1)-基本概念⽬录划分
⼀、基本概念:
1.1 编程指南
1.2 Variable
1.3 Tensor
1.4 LoDTensor
1.5 Operator
1.6 Program
1.7 Executor
1.8 命令式编程使⽤教程
壹、基本概念
⼀、编程指南
学习:
1. 如何表⽰和定义数据变量。
2.如何完整组建⼀个深度学习⽹络并进⾏训练。
①数据的表⽰和定义
paddle使⽤ tensor 承载数据,包括: 模型中的可学习参数(如⽹络权重、偏置等),⽹络中每⼀层输⼊、输出数据,常量数据。
paddle中使⽤ fluid.data 创建数据变量,fluid.data 需要指定 Tensor 的形状信息和数据类型,当遇到⽆法确定的维度时,可以将相应维度指定为 None,如下:
import paddle.fluid as fluid
# 定义⼀个数据类型 int64 的⼆维数据变量X,X的第⼀维的维度为3,第⼆个维度未知,要在程序执⾏过
程中才能确定,因此X的形状可以指定为【3, None】
x = fluid.data(name="x", shape=[3, None], dtype="int64")
# ⼤多数⽹络都会采⽤ batch ⽅式进⾏数据组织, batch ⼤⼩在定义时不确定,因此 batch 所在维度(通常时第⼀维)可以指定 None
batched_x = fluid.data(name="", shape=[None, 3, None], dtype="int64")
除 fluid.data 之外,还可以使⽤ fluid.layers.fill_constant 来创建常量,如下代码将创建⼀个维度为【3, 4】,数据类型为 int64 的Tensor,期中所有元素值均为16.
import paddle.fluid as fluid
data = fluid.layers.fill_constant(shape=[3, 4], value=16, dtype="int64")
*需要注意的是: 在声明式编程模型⽅式中,上述定义的 Tensor 并不具有值(即使创建常量的时候指定了 Value),他们仅代表将要执⾏的操作,在⽹络执⾏时(训练或预测)才会进⾏真正的赋值操作,⽐如打印上述代码中的data 将会得到对其信息的描述:
print(data)
输出结果:
name: "fill_p_0"
type {
type: LOD_TENSOR
lod_tensor {
tensor {
data_type: INT64
dims: 3
dims: 4
}
}
}
persistable: false
在⽹络执⾏过程中,获取 Tensor 数值有两种⽅式:
⽅式⼀是利⽤ paddle.fluid.layers.Print 创建⼀个打印操作,打印正在访问的 Tensor
⽅式⼀的代码实现如下所⽰:
import paddle.fluid as fluid
data = fluid.layers.fill_constant(shape=[3, 4], value=16, dtype='int64')
data = fluid.layers.Print(data, message="Print data:")
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
ret = exe.run()
运⾏时输出结果:
1571742368 Print data: The place is:CPUPlace
Tensor[fill_p_0]
shape: [3,4,]
dtype: x
data: 16,16,16,16,16,16,16,16,16,16,16,16,
⽅式⼆是将Variable添加在 fetch_list 中
②数据读取
使⽤ fluid.data 创建数据变量之后,需要把⽹络执⾏所需要的数据读取到对应变量中,具体数据准备,参考
③组建⽹络
在Paddle中,数据计算类API统⼀称为Operator(算⼦),简称OP,⼤多数OP在 paddle.fluid.layers 模块中提供。例如⽤户可以利⽤ paddle.fluid.layers.elementwise_add() 实现两个输⼊Tensor的加法运算:
# 定义变量
import paddle.fluid as fluid
a = fluid.data(name="a", shape=[None,1], dtype="int64")
numpy教程 pdfb = fluid.data(name="b", shape=[None,1], dtype="int64")
# 组建⽹络
result = fluid.layers.elementwise_add(a, b)
# 准备运⾏⽹络
cpu = fluid.CPUPlace() # 定义运算设备,这⾥选择在CPU下训练。
exe = fluid.Executor(cpu) # 创建执⾏器
exe.run(fluid.default_startup_program()) # ⽹络参数初始化
# 读取输⼊数据
import numpy
data_1 = int(input("Please enter an integer: a="))
data_2 = int(input("Please enter an integer: b="))
x = numpy.array([[data_1]])
y = numpy.array([[data_2]])
# 运⾏⽹络
outs = exe.run(
feed={"a":x, "b":y} # 将输⼊数据x,y 分别赋值给变量 a, b
fetch_list = [result] # 通过 fetch_list 参数指定需要获取的变量结果
)
# 输出计算结果
print(data_1, data_2, outs[0][0])
④组建更加复杂的⽹络
⑤⼀个完整的⽹络⽰例
⑥进⼀步学习
⼆、Variable
三、Tensor
四、LoDTensor
五、Operator
六、Program
七、Executor
⼋、命令式编程使⽤教程(动态图)
贰、编程实践
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论