Created by: liym27
A smaller PR splited from #22567
1. 本PR支持动态图转静态图:
- 识别:Paddle 动态图API
- 改写:基本的动态图API对应静态图API
- 类实例化和调用节点 统一为一个FunctionDef
- 对 类实例化和调用的参数做整合,共同作为FunctionDef节点的参数;删除不必要参数以及重新计算和添加必要的参数
(自定义Layer转化提交在其它PR)
2. API改写说明
示例1:基本的API调用转化
- 动态图代码:
@dygraph_to_static_output
def fn_1(x):
input = fluid.dygraph.to_variable(x) # 被替换为assign
# 该节点将被删除
pool2d_max = fluid.dygraph.Pool2D(pool_size=2, pool_type='max', pool_stride=1, global_pooling=False)
pool2d_max(input) # 普通表达式。 将被转化
res_1 = pool2d_max(input) # 赋值。将被转化
res_2 = pool2d_max(input) + pool2d_max(input) # ast子节点调用动态图接口。将被转化
- 转化后的静态图:
def fn_1(input):
input = fluid.layers.assign(x)
fluid.layers.pool2d(input, pool_size=2, pool_type='max', pool_stride=1, global_pooling=False)
res_1 = fluid.layers.pool2d(input, pool_size=2, pool_type='max', pool_stride=1, global_pooling=False)
res_2 = fluid.layers.pool2d(input, pool_size=2, pool_type='max', pool_stride=1, global_pooling=False) + fluid.layers.pool2d(input, pool_size=2, pool_type='max', pool_stride=1, global_pooling=False)
示例2:
- 动态图
def dyfunc_Linear(input):
fc = fluid.dygraph.Linear(
10, # 该参数将被删掉
output_dim=5, # 该参数名将被删掉
act='relu',
param_attr=fluid.ParamAttr(initializer=fluid.initializer.Constant(
value=0.99)),
bias_attr=fluid.ParamAttr(initializer=fluid.initializer.Constant(
value=0.5)), )
res = fc(input)
return res
- 转化后
def dyfunc_Linear(input):
res = fluid.layers.fc(
input=input, # 参数名与参数对应
size=5, # 计算参数 size
act='relu',
param_attr=fluid.ParamAttr(initializer=fluid.initializer.Constant(value=0.99)),
bias_attr=fluid.ParamAttr(initializer=fluid.initializer.Constant(value=0.5)),
num_flatten_dims=-1) # 增加了新参数num_flatten_dims
return res