- 首页 > it技术 > >
PaddlePaddle|PaddlePaddle在执行创建电影名称张量数据时出错
paddlepaddle问答专区
- 【PaddlePaddle|PaddlePaddle在执行创建电影名称张量数据时出错】问题描述:在创建数据用于预测时,定义一个定义的名称的张量数据时出现错误,错误提示真实的数据长度和设置参数
recursive_seq_lens
的值不相等。
- 报错信息:
in infer(use_cuda, inference_program, params_dirname)
19job_id = fluid.create_lod_tensor([[10]], [[1]], place)
20movie_id = fluid.create_lod_tensor([[783]], [[1]], place)
---> 21category_id = fluid.create_lod_tensor([[10, 8, 9]], [[1]], place)
22movie_title = fluid.create_lod_tensor([[1069, 4140, 2923, 710, 988]], [[5]], place)
23 /opt/conda/envs/py35-paddle1.0.0/lib/python3.5/site-packages/paddle/fluid/lod_tensor.py in create_lod_tensor(data, recursive_seq_lens, place)
74assert [
75new_recursive_seq_lens
---> 76] == recursive_seq_lens, "data and recursive_seq_lens do not match"
77flattened_data = https://www.it610.com/article/np.concatenate(data, axis=0).astype("int64")
78flattened_data = https://www.it610.com/article/flattened_data.reshape([len(flattened_data), 1])AssertionError: data and recursive_seq_lens do not match
- 问题复现:根据数据字典定义一个电影名称的列表,然后使用这个类别通过
fluid.create_lod_tensor
创建一个电影名称的张量数据,在执行创建时机出现以上的错误。错误代码如下:
movie_id = fluid.create_lod_tensor([[783]], [[1]], place)
category_id = fluid.create_lod_tensor([[10, 8, 9]], [[1]], place)
movie_title = fluid.create_lod_tensor([[1069, 4140, 2923, 710, 988]], [[1]], place)
- 解决问题:这个定义名称有五个单词,所以
recursive_seq_lens
参数的值应该是5,而不是1。正确代码如下:
movie_id = fluid.create_lod_tensor([[783]], [[1]], place)
category_id = fluid.create_lod_tensor([[10, 8, 9]], [[3]], place)
movie_title = fluid.create_lod_tensor([[1069, 4140, 2923, 710, 988]], [[5]], place)
- 问题拓展:对于创建张量的PaddlePaddle还提供了
paddle.fluid.layers.create_tensor
这个接口,这个这个接口跟fluid.create_lod_tensor
不一样的是,这个接口在创建时没有赋值,只有当执行器执行run
函数时,通过feed
参数执行赋值。
推荐阅读