PaddlePaddle在使用词向量模型预测字符串数据时出现数据类型错误

  • 关键字:张量预测数据

  • 问题描述:在使用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数据都会有一个数据字典,把字符串的文字转换成整型数据,再进行训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值