export¶
将输入的 Layer
存储为 ONNX
格式的模型,可使用onnxruntime或其他框架进行推理。
注解
具体使用案例请参考 模型导出ONNX协议 ,更多信息请参考: paddle2onnx 。
参数¶
layer (Layer) - 导出的
Layer
对象。path (str) - 存储模型的路径前缀。格式为
dirname/file_prefix
或者file_prefix
,导出后``ONNX``模型自动添加后缀.onnx
。input_spec (list[InputSpec|Tensor],可选) - 描述存储模型forward方法的输入,可以通过InputSpec或者示例Tensor进行描述。如果为
None
,所有原Layer
forward方法的输入变量将都会被配置为存储模型的输入变量。默认为None
。opset_version(int,可选) - 导出
ONNX
模型的Opset版本,目前稳定支持导出的版本为9、10和11。 默认为9
。**configs (dict,可选) - 其他用于兼容的存储配置选项。这些选项将来可能被移除,如果不是必须使用,不推荐使用这些配置选项。默认为
None
。目前支持以下配置选项:(1) output_spec (list[Tensor]) - 选择存储模型的输出目标。默认情况下,所有原Layer
forward方法的返回值均会作为存储模型的输出。如果传入的output_spec
列表不是所有的输出变量,存储的模型将会根据output_spec
所包含的结果被裁剪。
返回¶
无。
代码示例¶
import paddle
import numpy as np
class LinearNet(paddle.nn.Layer):
def __init__(self):
super(LinearNet, self).__init__()
self._linear = paddle.nn.Linear(128, 10)
def forward(self, x):
return self._linear(x)
# Export model with 'InputSpec' to support dynamic input shape.
def export_linear_net():
model = LinearNet()
x_spec = paddle.static.InputSpec(shape=[None, 128], dtype='float32')
paddle.onnx.export(model, 'linear_net', input_spec=[x_spec])
export_linear_net()
class Logic(paddle.nn.Layer):
def __init__(self):
super(Logic, self).__init__()
def forward(self, x, y, z):
if z:
return x
else:
return y
# Export model with 'Tensor' to support pruned model by set 'output_spec'.
def export_logic():
model = Logic()
x = paddle.to_tensor(np.array([1]))
y = paddle.to_tensor(np.array([2]))
# Static and run model.
paddle.jit.to_static(model)
out = model(x, y, z=True)
paddle.onnx.export(model, 'pruned', input_spec=[x], output_spec=[out])
export_logic()