首页 Paddle框架 帖子详情
paddle.jit.save模型保存报错
收藏
快速回复
Paddle框架 问答模型训练 1238 6
paddle.jit.save模型保存报错
收藏
快速回复
Paddle框架 问答模型训练 1238 6

AI Studio里报错,不知道啥原因。

GAN网络,判别器用paddle提供的resnet,jit.save保存就没问题。生成器是自己写的结构(三卷积、七残差块、二反卷积、一卷积),用jit.save就报错了。请大佬们帮解决一下!

以下是报错信息:

opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:77: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
return (isinstance(seq, collections.Sequence) and

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_call_func.py:85: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
func_in_dict = func == v

---------------------------------------------------------------------------KeyError Traceback (most recent call last)~/main.py in
9 model.model_test()
10 a = ModelOptions()
---> 11 main(a.parse())
12
~/main.py in main(options)
5 model = Model(options)
6 if options.tr_or_te == 'train':
----> 7 model.model_train()
8 elif options.tr_or_te == 'test':
9 model.model_test()
~/model.py in model_train(self)
197 paddle.jit.save(layer=D, path=path_D, input_spec=[real_imgs])
198 path_G = os.path.join(self.options.checkpoint_location, 'weights', 'final_G')
--> 199 paddle.jit.save(layer=G, path=path_G, input_spec=[img_gray])
200
201 def model_test(self):
in save(layer, path, input_spec, **configs)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
23 def __impl__(func, *args, **kwargs):
24 wrapped_func = decorator_func(func)
---> 25 return wrapped_func(*args, **kwargs)
26
27 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py in __impl__(*args, **kwargs)
37 def __impl__(*args, **kwargs):
38 with framework._dygraph_guard(None):
---> 39 return func(*args, **kwargs)
40
41 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py in save(layer, path, input_spec, **configs)
684 static_forward = declarative(
685 inner_layer.forward, input_spec=inner_input_spec)
--> 686 concrete_program = static_forward.concrete_program
687 # the input_spec has been used in declarative, which is equal to
688 # @declarative with input_spec and jit.save without input_spec,
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in concrete_program(self)
452 print(decorated_foo.concrete_program)
453 """
--> 454 return self.concrete_program_specify_input_spec(input_spec=None)
455
456 def concrete_program_specify_input_spec(self, input_spec=None):
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in concrete_program_specify_input_spec(self, input_spec)
486 if has_input_spec:
487 concrete_program, _ = self.get_concrete_program(
--> 488 *desired_input_spec)
489 return concrete_program
490 else:
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in get_concrete_program(self, *args, **kwargs)
400
401 # 3. check whether hit the cache or build a new program for the input arguments
--> 402 concrete_program, partial_program_layer = self._program_cache[cache_key]
403 return concrete_program, partial_program_layer
404
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in __getitem__(self, item)
709
710 if item not in self._caches:
--> 711 self._caches[item] = self._build_once(item)
712 # Note: raise warnings if number of traced program is more than `max_tracing_count`
713 current_tracing_count = len(self._caches)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in _build_once(self, cache_key)
700 input_spec=cache_key.input_args_with_spec,
701 input_kwargs_spec=cache_key.input_kwargs_with_spec,
--> 702 class_instance=cache_key.class_instance)
703 return concrete_program, partial_program_from(concrete_program)
704
in from_func_spec(func_spec, input_spec, input_kwargs_spec, class_instance)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
23 def __impl__(func, *args, **kwargs):
24 wrapped_func = decorator_func(func)
---> 25 return wrapped_func(*args, **kwargs)
26
27 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py in __impl__(*args, **kwargs)
37 def __impl__(*args, **kwargs):
38 with framework._dygraph_guard(None):
---> 39 return func(*args, **kwargs)
40
41 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in from_func_spec(func_spec, input_spec, input_kwargs_spec, class_instance)
656 error_data = getattr(e, error.ERROR_DATA, None)
657 if error_data:
--> 658 error_data.raise_new_exception()
659 raise
660
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py in raise_new_exception(self)
187 # 2. Use exec to bypass syntax error checking in Python 2.
188
--> 189 six.exec_("raise new_exception from None")
190 else:
191 raise new_exception
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py in
KeyError: 'In transformed code:\n\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/container.py", line 95, in forward (* user code *)\n\tinput = layer(input)\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_call_func.py", line 140, in convert_call\n\t"Convert callable object: convert {}.".format(func))\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 1189, in __repr__\n\textra_repr = self.extra_repr()\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/conv.py", line 166, in extra_repr\n\treturn main_str.format(**self.__dict__)\n KeyError: \'_output_padding\''

0
收藏
回复
全部评论(6)
时间顺序
B
B英俊
#2 回复于2021-04

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:77: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
return (isinstance(seq, collections.Sequence) and

/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_call_func.py:85: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
func_in_dict = func == v

---------------------------------------------------------------------------KeyError Traceback (most recent call last)~/main.py in
9 model.model_test()
10 a = ModelOptions()
---> 11 main(a.parse())
12
~/main.py in main(options)
5 model = Model(options)
6 if options.tr_or_te == 'train':
----> 7 model.model_train()
8 elif options.tr_or_te == 'test':
9 model.model_test()
~/model.py in model_train(self)
197 paddle.jit.save(layer=D, path=path_D, input_spec=[real_imgs])
198 path_G = os.path.join(self.options.checkpoint_location, 'weights', 'final_G')
--> 199 paddle.jit.save(layer=G, path=path_G, input_spec=[img_gray])
200
201 def model_test(self):
in save(layer, path, input_spec, **configs)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
23 def __impl__(func, *args, **kwargs):
24 wrapped_func = decorator_func(func)
---> 25 return wrapped_func(*args, **kwargs)
26
27 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py in __impl__(*args, **kwargs)
37 def __impl__(*args, **kwargs):
38 with framework._dygraph_guard(None):
---> 39 return func(*args, **kwargs)
40
41 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py in save(layer, path, input_spec, **configs)
684 static_forward = declarative(
685 inner_layer.forward, input_spec=inner_input_spec)
--> 686 concrete_program = static_forward.concrete_program
687 # the input_spec has been used in declarative, which is equal to
688 # @declarative with input_spec and jit.save without input_spec,
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in concrete_program(self)
452 print(decorated_foo.concrete_program)
453 """
--> 454 return self.concrete_program_specify_input_spec(input_spec=None)
455
456 def concrete_program_specify_input_spec(self, input_spec=None):
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in concrete_program_specify_input_spec(self, input_spec)
486 if has_input_spec:
487 concrete_program, _ = self.get_concrete_program(
--> 488 *desired_input_spec)
489 return concrete_program
490 else:
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in get_concrete_program(self, *args, **kwargs)
400
401 # 3. check whether hit the cache or build a new program for the input arguments
--> 402 concrete_program, partial_program_layer = self._program_cache[cache_key]
403 return concrete_program, partial_program_layer
404
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in __getitem__(self, item)
709
710 if item not in self._caches:
--> 711 self._caches[item] = self._build_once(item)
712 # Note: raise warnings if number of traced program is more than `max_tracing_count`
713 current_tracing_count = len(self._caches)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in _build_once(self, cache_key)
700 input_spec=cache_key.input_args_with_spec,
701 input_kwargs_spec=cache_key.input_kwargs_with_spec,
--> 702 class_instance=cache_key.class_instance)
703 return concrete_program, partial_program_from(concrete_program)
704
in from_func_spec(func_spec, input_spec, input_kwargs_spec, class_instance)
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py in __impl__(func, *args, **kwargs)
23 def __impl__(func, *args, **kwargs):
24 wrapped_func = decorator_func(func)
---> 25 return wrapped_func(*args, **kwargs)
26
27 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py in __impl__(*args, **kwargs)
37 def __impl__(*args, **kwargs):
38 with framework._dygraph_guard(None):
---> 39 return func(*args, **kwargs)
40
41 return __impl__
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py in from_func_spec(func_spec, input_spec, input_kwargs_spec, class_instance)
656 error_data = getattr(e, error.ERROR_DATA, None)
657 if error_data:
--> 658 error_data.raise_new_exception()
659 raise
660
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py in raise_new_exception(self)
187 # 2. Use exec to bypass syntax error checking in Python 2.
188
--> 189 six.exec_("raise new_exception from None")
190 else:
191 raise new_exception
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py in
KeyError: 'In transformed code:\n\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/container.py", line 95, in forward (* user code *)\n\tinput = layer(input)\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/convert_call_func.py", line 140, in convert_call\n\t"Convert callable object: convert {}.".format(func))\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py", line 1189, in __repr__\n\textra_repr = self.extra_repr()\n File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/conv.py", line 166, in extra_repr\n\treturn main_str.format(**self.__dict__)\n KeyError: \'_output_padding\''

0
回复
AIStudio810258
#3 回复于2021-04

用paddle.save能存储么?

0
回复
AIStudio810258
#4 回复于2021-04

如果也报错,是不是模型有问题

0
回复
B
B英俊
#5 回复于2021-04
用paddle.save能存储么?

paddle.save 能存的。问题已经解决了,谢谢!

0
回复
B
B英俊
#6 回复于2021-04

问题我已经找到了,是Conv2DTranspose的问题,我用了其中output_padding的参数,不知为何jit.save就报错了,说是KeyError,dict里没有找到output_padding的关键字。看我问题最后几行的报错信息也能看到。

但我查了官方文档Conv2DTranspose也有output_padding,错误就有点莫名其妙了。没办法我就删除了output_padding,同时改padding,改用'SAME',没用具体数字来指代padding。

比如原本:nn.Conv2DTranspose(64, 32, (4, 4), (2, 2), (1, 1), (1, 1))

改:nn.Conv2DTranspose(64, 32, (4, 4), (2, 2), "SAME")

0
回复
AIStudio810258
#7 回复于2021-04
B英俊 #6
问题我已经找到了,是Conv2DTranspose的问题,我用了其中output_padding的参数,不知为何jit.save就报错了,说是KeyError,dict里没有找到output_padding的关键字。看我问题最后几行的报错信息也能看到。 但我查了官方文档Conv2DTranspose也有output_padding,错误就有点莫名其妙了。没办法我就删除了output_padding,同时改padding,改用'SAME',没用具体数字来指代padding。 比如原本:nn.Conv2DTranspose(64, 32, (4, 4), (2, 2), (1, 1), (1, 1)) 改:nn.Conv2DTranspose(64, 32, (4, 4), (2, 2), "SAME")
展开

原来如此,这个same原来我总在转置卷积里用不好,有时结果就是不same~

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