首页 Paddle Serving 帖子详情
模型输入是参数是Tensor列表, 保存静态图失败,这种情况怎么解决?
收藏
快速回复
Paddle Serving 问答部署Serving 861 1
模型输入是参数是Tensor列表, 保存静态图失败,这种情况怎么解决?
收藏
快速回复
Paddle Serving 问答部署Serving 861 1

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)).

求助一下:

像这种模型输入参数是动态列表的情况下,怎么声明输入函数的格式,怎么转化成静态图?

 

0
收藏
回复
全部评论(1)
时间顺序
i
iambusing
#2 回复于2021-09

补充,精简表格后,动态模型输入的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.]]))

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户