Paddle Fluid编程入门

太叔栋
2023-12-01

根据《90分钟PaddlePaddle快速上手》整理。

Paddle Fluid的整体架构

  • 组网模块
  • 模型表达与优化
  • 训练模块
  • 服务器预测
  • 移动端预测

Paddle Fluid的使用基本概念

  • layer:表示一个独立计算的逻辑,通常包含一个或多个operator,layers.relu表示relu计算,layers.pool2d表示pool操作。

  • Layer有Variable输入和输出。示例:output=fluid.layers.relu(x)

  • Variable:表示一个变量,可以是一个张量Tensor。也可以是其他类型。Variable进入Layer计算,然后Layer返回Variable。
    示例:var = fluid.layers.fill_constant(shape=[1], dtype=‘float32’, value=5)

  • Program:包含Variable定义的多个变量和Layer定义的多个计算。
    Program从用户角度顺序执行。

  • Executor:用来执行Program,会一次性执行Program中定义的所有计算,可以通过feed来提供Program输入数据,通过fetch_list来获取输出数据。

  • Control Flow:paddle支持if-else和while等语法来描述灵活的模型逻辑。

    示例:

#create a if-else block
ifcond = fluid.layers.less_than(x=a, y=b)
ie = fluid.layers.IfElse(ifcond)
with ie.true_block():
    c = ie.input(a)
    c += 1
    ie.output(c)

#output c
exe.run(fluid.default_main_program(), fetch_list=[c])
#while
a = fluid.layers.fill_constant([2,2], dtype='float32', value=1.0)
i = fluid.layers.zeros([1], dtype='int64')
until = fluid.layers.fill_constant([1], dtype='int64', value=10)
data_arr = fluid.layers.array_write(a, i)#把a写入新的array的位置i中
cond = fluid.layers.less_than(x=i, y=until)

#当i小于10时进行循环
while_op = fluid.layers.While(cond=cond)
with while_op.block():
    a = fluid.layers.array_read(data_arr, i)
    a = a + 1
    i = fluid.layers.increment(x=i, value=1, in_place=True)#为函数中传入参数x增加valve大小,x元素个数必须为1,in_place默认在原变量进行计算。
    fluid.layers.less_than(x=i, y=until, cond=cond)#参数cond是用于存储结果的变量
    fluid.layers.array_write(a, i, data_arr)

#读出data_arr最后位置的结果
ret = fluid.layers.array_read(data_arr, i-1)

exe = 
exe.run 
  • Place:指定运行设备

  • CompileProgram: 对Program进行优化,生成一个执行的图
    示例:

place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()

exe = fluid.Executor()

#Run some initialization, for example, parameter
exe.run(fluid.default_startup_program())

#Compile the program for multi-device execution and various optimizations
binary = CompileProgram(fluid.default_main_program()).with_data_parallel(loss_name=cost.name)
Loss = exe.run(binary, feed={}, fetch=[cost]) 

Paddle Fluid编写手写数字识别模型

 类似资料: