根据《90分钟PaddlePaddle快速上手》整理。
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])