RuntimeError: Some of your feed data hold LoD information. They can not be completely cast from a list of Python ndarray to LoDTensor. Please convert data to LoDTensor directly before feeding the data.
Created by: Angus07
我为了debug,要把pyreader去掉。 原来的代码是这样的,可以跑通: pyreader = fluid.layers.py_reader( capacity=50, shapes=[[-1, args.max_seq_len, 1], [-1, args.max_seq_len, 1], [-1, args.max_seq_len, 1], [-1, args.max_seq_len, args.max_seq_len], [-1, args.max_seq_len, args.max_seq_len], [-1, args.max_seq_len, 1], [-1, 1], [-1], [-1, 1, args.max_seq_len], [-1, 1], [-1, -1]], dtypes=['int64', 'int64', 'int64', 'float32', 'float32', 'int64', 'float32', 'int32', 'float32', 'int64', 'int64'], lod_levels=[0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0], name=pyreader_name, use_double_buffer=True)
(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) = fluid.layers.read_file(pyreader)
我现在改成这样 src_ids = layers.data(name="src_ids", shape=[-1, args.max_seq_len, 1], dtype='int64') sent_ids = layers.data(name="sent_ids", shape=[-1, args.max_seq_len, 1], dtype='int64') pos_ids = layers.data(name="pos_ids", shape=[-1, args.max_seq_len, 1], dtype='int64') input_mask = layers.data(name="input_mask", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32') input_mask_encoder = layers.data(name="input_mask_encoder", shape=[-1, args.max_seq_len, args.max_seq_len], dtype='float32') 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') tgt_input_mask = layers.data(name="tgt_input_mask", shape=[-1, 1, args.max_seq_len], dtype='float32') tgt_start_pos = layers.data(name="tgt_start_pos", shape=[-1, 1], dtype='int64') data_ids = layers.data(name="data_ids", shape=[-1, -1], dtype='int64')  然后通过feed的方式传入数据  outputs = exe.run(feed=e, program=program, fetch_list=fetch_list, return_numpy=return_numpy)  e是一个dict 里面的字段数据和之前用Pyreader的时候一样,没有改过,其中对应两个Lod_level=2的字段已经转成了Lod tensor,其他是np.array。 然后就报了这个错:  RuntimeError: Some of your feed data hold LoD information. They can not be completely cast from a list of Python ndarray to LoDTensor. Please convert data to LoDTensor directly before feeding the data.