使用TracedLayer保存的模型,load不进来
Created by: hubu-wangpei
版本:
Name: paddlepaddle
Version: 1.7.1
保存了模型后,运行下面的代码报错 ValueError: type
to initialized an Operator can not be None.
place = fluid.CPUPlace()
exe = fluid.Executor(place)
path = "./saved_infer_model"
[inference_program, feed_target_names, fetch_targets] = (fluid.io.load_inference_model(dirname=path, executor=exe))
报错
---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-39-188e36eee31c> in <module>
7
8 # 示例一: 不需要指定分布式查找表的模型加载示例,即训练时未用到distributed lookup table。
----> 9 [inference_program, feed_target_names, fetch_targets] = (fluid.io.load_inference_model(dirname=path, executor=exe))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/io.py in load_inference_model(dirname, executor, model_filename, params_filename, pserver_endpoints)
1369 params_filename = params_filename
1370
-> 1371 program = Program.parse_from_string(program_desc_str)
1372 if not core._is_program_version_supported(program._version()):
1373 raise ValueError("Unsupported program version: %d\n" %
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in parse_from_string(binary_str)
4230 p.desc = core.ProgramDesc(binary_str)
4231 p.blocks = [Block(p, i) for i in six.moves.range(p.desc.num_blocks())]
-> 4232 p._sync_with_cpp()
4233 return p
4234
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in _sync_with_cpp(self)
4424 self.blocks.append(Block(self, block_idx))
4425 for block in self.blocks:
-> 4426 block._sync_with_cpp()
4427
4428 def _copy_param_info_from(self, other):
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in _sync_with_cpp(self)
2643 for index in range((end_index + 1), len(ops_in_cpp)):
2644 op_desc = ops_in_cpp[index]
-> 2645 op = Operator(self, op_desc)
2646 self.ops.append(op)
2647
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/framework.py in __init__(self, block, desc, type, inputs, outputs, attrs)
1757 if type is None:
1758 raise ValueError(
-> 1759 "`type` to initialized an Operator can not be None.")
1760 self._type = type
1761 self.attrs = attrs if attrs else {}
ValueError: `type` to initialized an Operator can not be None.
运行load_inference_model这个示例也报同样的错误
import paddle.fluid as fluid
import numpy as np
# 构建模型
main_prog = fluid.Program()
startup_prog = fluid.Program()
with fluid.program_guard(main_prog, startup_prog):
data = fluid.layers.data(name="img", shape=[64, 784], append_batch_size=False)
w = fluid.layers.create_parameter(shape=[784, 200], dtype='float32')
b = fluid.layers.create_parameter(shape=[200], dtype='float32')
hidden_w = fluid.layers.matmul(x=data, y=w)
hidden_b = fluid.layers.elementwise_add(hidden_w, b)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(startup_prog)
# 保存预测模型
path = "./infer_model"
fluid.io.save_inference_model(dirname=path, feeded_var_names=['img'],target_vars=[hidden_b], executor=exe, main_program=main_prog)
# 示例一: 不需要指定分布式查找表的模型加载示例,即训练时未用到distributed lookup table。
[inference_program, feed_target_names, fetch_targets] = (fluid.io.load_inference_model(dirname=path, executor=exe))
tensor_img = np.array(np.random.random((1, 64, 784)), dtype=np.float32)
results = exe.run(inference_program,
feed={feed_target_names[0]: tensor_img},
fetch_list=fetch_targets)