首页 Paddle Inference 帖子详情
加了动转静修饰符后报错 已解决
收藏
快速回复
Paddle Inference 问答部署推理 1221 9
加了动转静修饰符后报错 已解决
收藏
快速回复
Paddle Inference 问答部署推理 1221 9

想在bml上部署模型,用一个只有一个2d卷积层的网络测试,发现加上动转静修饰符就报错:

Traceback (most recent call last):

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\IPython\core\interactiveshell.py", line 3437, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)

File "", line 53, in
pred = net(img)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\layers.py", line 902, in __call__
outputs = self.forward(*inputs, **kwargs)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 356, in __call__
raise e

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 333, in __call__
concrete_program, partial_program_layer = self.get_concrete_program(

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 401, in get_concrete_program
concrete_program, partial_program_layer = self._program_cache[cache_key]

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 714, in __getitem__
self._caches[item] = self._build_once(item)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 701, in _build_once
concrete_program = ConcreteProgram.from_func_spec(

File "", line 2, in from_func_spec

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\base.py", line 40, in __impl__
return func(*args, **kwargs)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 623, in from_func_spec
static_func = convert_to_static(dygraph_function)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 140, in convert_to_static
static_func = _FUNCTION_CACHE.convert_with_cache(function)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 77, in convert_with_cache
static_func = self._convert(func)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 113, in _convert
root = gast.parse(source_code)

File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\gast\gast.py", line 298, in parse
return ast_to_gast(_ast.parse(*args, **kwargs))

File "c:\users\admin\appdata\local\programs\python\python39\lib\ast.py", line 50, in parse
return compile(source, filename, mode, flags,

File "", line 1
@paddle.jit.to_static
^
IndentationError: unexpected indent

FutureSI
已解决
13# 回复于2021-08
最后使用这种方法解决了动转静: out_dygraph, static_layer = TracedLayer.trace(layer, inputs=[input_tensor]) static_layer.save_inference_model("output/model", feed=[0], fetch=[0])
展开
0
收藏
回复
全部评论(9)
时间顺序
FutureSI
#2 回复于2021-08

整个网络就一个2d卷积层

class NET(nn.Layer):
    def __init__(self):
        super(NET, self).__init__()
        self.model2 = nn.Sequential(*[
            nn.Conv2D(3, 3, 3, 1, 1)
        ])
    @paddle.jit.to_static
    def forward(self, x):
        x = self.model2(x)
        print(x.shape)
        return x
0
回复
FutureSI
#3 回复于2021-08

注释掉 @paddle.jit.to_static 就ok,加上就报错

0
回复
FutureSI
#4 回复于2021-08

不序列化哪个2d卷积层结果也是一样。之所以用是因为序列里加Linear层就能使用 @paddle.jit.to_static 修饰符。这是怎么回事?

0
回复
FutureSI
#5 回复于2021-08

而且奇怪的是在前面加上两个线性层也是可以使用 @paddle.jit.to_static 修饰符的。

class NET(nn.Layer):
    def __init__(self):
        super(NET, self).__init__()
        self.model = nn.Sequential(*[
            nn.Linear(13, 128), 
            nn.Linear(128, 3 * 5 * 5)
        ])
        self.model2 = nn.Sequential(*[
            nn.Conv2D(3, 3, 3, 1, 1)
        ])
    @paddle.jit.to_static
    def forward(self, x):
        x = self.model(x)
        print(x.shape)
        x = x.reshape([-1, 3, 5, 5])
        x = self.model2(x)
        print(x.shape)
        return x
0
回复
FutureSI
#6 回复于2021-08
而且奇怪的是在前面加上两个线性层也是可以使用 @paddle.jit.to_static 修饰符的。 [代码]

去掉前面两个线性层,后面的前向函数,训练的数据形状也相应修改了,但就是用不了动转静修饰符,太奇怪了。。。

0
回复
FutureSI
#7 回复于2021-08

paddlecals套件里扒出这种动转静写法是可以的:

net = to_static( \
    net, \
    input_spec=[ \
        paddle.static.InputSpec( \
            shape=[1, 3, 5, 5], dtype='float32') \
    ])
0
回复
FutureSI
#8 回复于2021-08
paddlecals套件里扒出这种动转静写法是可以的: [代码]

这个写法也不行

0
回复
FutureSI
#11 回复于2021-08

用了文档上的demo是可以用Conv2D的

0
回复
FutureSI
#13 回复于2021-08

最后使用这种方法解决了动转静:

out_dygraph, static_layer = TracedLayer.trace(layer, inputs=[input_tensor])
static_layer.save_inference_model("output/model", feed=[0], fetch=[0])

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