-
关键字:
张量
,预测数据
-
问题描述:在使用
fluid.create_lod_tensor
接口定义词向量预测数据的时候,预测数据时一个二维的字符串列表数据,出现数据类型的错误。 -
报错信息:
<ipython-input-7-746fcd239131> in infer(use_cuda, inference_program, params_dirname)
17 lod = [[1]]
18
---> 19 first_word = fluid.create_lod_tensor(data1, lod, place)
20 second_word = fluid.create_lod_tensor(data2, lod, place)
21 third_word = fluid.create_lod_tensor(data3, lod, place)
/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)
75 new_recursive_seq_lens
76 ] == recursive_seq_lens, "data and recursive_seq_lens do not match"
---> 77 flattened_data = np.concatenate(data, axis=0).astype("int64")
78 flattened_data = flattened_data.reshape([len(flattened_data), 1])
79 return create_lod_tensor(flattened_data, recursive_seq_lens, place)
ValueError: invalid literal for int() with base 10: 'among'
- 问题复现:定义一个
data1
的二维字符串列表变量,然后使用这变量通过fluid.create_lod_tensor
接口创建一个张量数据,用于之后预测的数据,在执行创建的时候就会报错。错误代码如下:
data1 = [['among']]
data2 = [['a']]
data3 = [['group']]
data4 = [['of']]
lod = [[1]]
first_word = fluid.create_lod_tensor(data1, lod, place)
second_word = fluid.create_lod_tensor(data2, lod, place)
third_word = fluid.create_lod_tensor(data3, lod, place)
fourth_word = fluid.create_lod_tensor(data4, lod, place)
- 解决问题:
fluid.create_lod_tensor
接口的参数data
的类型是一个numpy、列表胡或者是张量,上面之所以会报错,是因为使用了字符串,这些需要的是一个整型的单词标签。正确代码如下:
data1 = [[211]] # 'among'
data2 = [[6]] # 'a'
data3 = [[96]] # 'group'
data4 = [[4]] # 'of'
lod = [[1]]
first_word = fluid.create_lod_tensor(data1, lod, place)
second_word = fluid.create_lod_tensor(data2, lod, place)
third_word = fluid.create_lod_tensor(data3, lod, place)
fourth_word = fluid.create_lod_tensor(data4, lod, place)
- 问题分析:在PaddlePaddle的训练数据中,都是以数字的形式表示的,并不会使用字符串的方式进行训练。所以这种NLP数据都会有一个数据字典,把字符串的文字转换成整型数据,再进行训练。