https://aistudio.baidu.com/aistudio/projectdetail/701621?channel=0&channelType=0&shared=1
上文中的预测中,前向函数forward(self, *input_data)中,前向推理部分 `*input_data`的`*`表示传入任一数量的变量, 实际运行中, input是一个Tensor类型的列表,每一个元素代表一个输入参数,有的参数是Int64,有的是float32类型的.
1. 使用paddle.jit.save(layer=model.network,path="inference/linear")保存会提示下面错误.
ValueError: No valid transformed program for function: forward(), input_spec: None.
Please specific `input_spec` in `@paddle.jit.to_static` or feed input tensor to call the decorated function at once.
提示要指导输入类型. 按要求输入类型后,
paddle.jit.save(layer=model.network,path="inference/linear",input_spec=[InputSpec(shape=(-1, 1), dtype=paddle.int64, name='sn'), InputSpec(shape=(-1, 1), dtype=paddle.int64, name='ratmode'), InputSpec(shape=(-1, 1), dtype=paddle.float32, name='pderrcnt'), InputSpec(shape=(-1, 1), dtype=paddle.float32, name='pderrcntPerDay'), InputSpec(shape=(-1, 1), dtype=paddle.float32, name='pderrcntPerTime')])
又提示`forward` requires 0 arguments: [], but received xxx
ValueError: The decorated function `forward` requires 0 arguments: [], but received 5 with (InputSpec(shape=(-1, 1), dtype=paddle.int64, name=sn), InputSpec(shape=(-1, 1), dtype=paddle.int64, name=ratmode), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcnt), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcntPerDay), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcntPerTime)).
注: InputSpec 跟实际输入的表格列数有关,我精简了表格输入项,所以这里输入5个参数也是正确的格式.跟原文有区别.
2. 使用model.save(path="inference/pdabnorm",training=False)保存静态图,会提示下面错误
ValueError: The decorated function `forward` requires 0 arguments: [], but received 5 with (InputSpec(shape=(-1, 1), dtype=paddle.int64, name=sn), InputSpec(shape=(-1, 1), dtype=paddle.int64, name=ratmode), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcnt), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcntPerDay), InputSpec(shape=(-1, 1), dtype=paddle.float32, name=pderrcntPerTime)).
求助一下:
像这种模型输入参数是动态列表的情况下,怎么声明输入函数的格式,怎么转化成静态图?
补充,精简表格后,动态模型输入的inputdata 其中一次的参数如下:
(tensor(shape=[1, 1], dtype=int64, place=CPUPlace, stop_gradient=True,
[[2240]]), tensor(shape=[1, 1], dtype=int64, place=CPUPlace, stop_gradient=True,
[[1]]), tensor(shape=[1, 1], dtype=float32, place=CPUPlace, stop_gradient=True,
[[1.]]), tensor(shape=[1, 1], dtype=float32, place=CPUPlace, stop_gradient=True,
[[1.]]), tensor(shape=[1, 1], dtype=float32, place=CPUPlace, stop_gradient=True,
[[1.]]))