PaddlePaddle Fluid Source Code Overview¶
Examples: https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/v2/fluid/tests/book
Core: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/framework
Operator: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/operators
Memory: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/memory
Platform: https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/platform
Compile Time¶
The following defines the NN. The definition goes into this protocol buffer.
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None)
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_cost = fluid.layers.mean(x=cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(avg_cost)
- Variables:
x
,y
,y_predict
,cost
andavg_cost
. Python - Layers:
fluid.layers.data
,fluid.layers.fc
andfluid.layers.mean
are layers. Python- Every Layer has one or more operators and variables/parameters
- All the operators are defined at
paddle/operators/
. Other worth-looking files:- Base class:
paddle/framework/operator.h
- Operator Registration:
paddle/framework/op_registry.h
- Operator Lookup:
paddle/framework/op_info.h
- Base class:
- All the operators are defined at
- Every Layer has one or more operators and variables/parameters
- Optimizer:
fluid.optimizer.SGD
. It does the following
Run Time¶
The following evaluates the NN. Instantiates all the variables, operators.
place = fluid.CPUPlace()
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
exe = fluid.Executor(place)
# Allocate memory. Initialize Parameter.
exe.run(fluid.default_startup_program())
# Allocate memory. Do computation.
exe.run(fluid.default_main_program(),
feed=feeder.feed(data),
fetch_list=[avg_cost])
- Place:
place
. one of CPU, GPU or FPGA. C++- The device handle are at paddle/platform/device_context.h
- Executor:
fluid.Executor(place)
. [Python, C++]- Feeds the data:
feed=feeder.feed(data)
- Evaluates all the operators
- Fetches the result:
fetch_list=[avg_cost]
- Feeds the data:
- Other worth looking files:
- Scope: paddle/framework/scope.h. Where all the variables live
- Variable: paddle/framework/variable.h. Where all the data (most likely tensors) live
- Tensor: paddle/framework/tensor.h. Where we allocate memory through
paddle/memory/
- Tensor: paddle/framework/tensor.h. Where we allocate memory through
- Variable: paddle/framework/variable.h. Where all the data (most likely tensors) live
- Scope: paddle/framework/scope.h. Where all the variables live