fluid.io.save_inference_model 报错
Created by: Angus07
保存模型时报错 Traceback (most recent call last): File "./httpserver.py", line 203, in main_test() File "./httpserver.py", line 145, in main_test target_vars=[seg_ids, seg_scores, data_ids], executor=exe) File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 1187, in save_inference_model prepend_feed_ops(main_program, feeded_var_names) File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 986, in prepend_feed_ops out = global_block.var(name) File "/run/chenliangyu/title_http/output/python/lib/python2.7/site-packages/paddle/fluid/framework.py", line 2234, in var raise ValueError("var %s not in this block" % name) ValueError: var input_mask_encoder not in this block
核心调用代码如下: with fluid.program_guard(fluid.default_main_program(), startup_prog): with fluid.unique_name.guard(): test_graph_vars, seg_ids, seg_scores, data_ids = create_model( args, pyreader_name='test_reader', ernie_config=ernie_config, is_prediction=args.do_dec)
test_prog = fluid.default_main_program().clone(for_test=True)
exe = fluid.Executor(place) path = "./infer_model" exe.run(startup_prog) fluid.io.save_inference_model(dirname=path, feeded_var_names=['src_ids', "sent_ids","pos_ids", "input_mask", "input_mask_encoder", "tgt_ids", "init_scores", "parent_idx", "tgt_input_mask", "tgt_start_pos", "data_ids"], target_vars=[seg_ids, seg_scores, data_ids], executor=exe)
这个变量是存在的, 代码如下: src_ids = layers.data(name="src_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0) sent_ids = layers.data(name="sent_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0) pos_ids = layers.data(name="pos_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=0) input_mask = layers.data(name="input_mask", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32', lod_level=0) input_mask_encoder = layers.data(name="input_mask_encoder", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32', lod_level=0) tgt_ids = layers.data(name="tgt_ids", shape=[-1, args.max_seq_len, 1], dtype='int64', lod_level=2) init_scores = layers.data(name="init_scores", shape=[-1, 1], dtype='float32', lod_level=2) parent_idx = layers.data(name="parent_idx", shape=[-1], dtype='int32', lod_level=0) tgt_input_mask = layers.data(name="tgt_input_mask", shape=[-1, 1, args.max_seq_len], dtype='float32', lod_level=0) tgt_start_pos = layers.data(name="tgt_start_pos", shape=[-1, 1], dtype='int64', lod_level=0) data_ids = layers.data(name="data_ids", shape=[-1, -1], dtype='int64', lod_level=0)