Fluid版本中如何使用序列数据?

原创
2019/03/07 10:51
阅读数 46
  • 问题描述:在旧版的Paddle中可以使用三种序列格式来使用序列数据,但在Fluid版中这些功能都消失了,那我现在该如何在Fluid版的Paddle中使用序列数据呢?

  • 问题分析:
    Fluid版是一个比较大的改进版本,从多方面考虑后,并没有很完美的向后兼容,这就造成旧版Paddle中的方法并不能再Fluid使用,在Fluid中所有的数据类型都为LoD-Tensor,对于不存在序列信息的数据(如此处的变量X),其lod_level=0,如果是存在序列的数据则根据需求设置不同的lod_level则可。

  • 问题解决:

可以直接使用fluid.create_lod_tensor()方法来使用序列数据,该方法的主要作用就是从numpy数组,表或现有的lod张量创建lod张量。实例如下:

import paddle.fluid as fluid

data1 = [[211]]  
data2 = [[6]]  
lod = [[1]]

place = fluid.CPUPlace()

first_word = fluid.create_lod_tensor(data1, lod, place)
second_word = fluid.create_lod_tensor(data2, lod, place)

更多细节可以参考LoDTensor文档:http://www.paddlepaddle.org/documentation/docs/zh/1.1/user_guides/howto/prepare_data/lod_tensor.html#

  • 问题拓展:
    create_lod_tensor函数从一个numpy数组,列表或者已经存在的lod tensor中创建一个lod tensor。

通过一下几步实现:

1.检查length-based level of detail (LoD,长度为基准的细节层次),或称recursive_sequence_lengths(递归序列长度)的正确性
2.将recursive_sequence_lengths转化为offset-based LoD(偏移量为基准的LoD)
3.把提供的numpy数组,列表或者已经存在的lod tensor复制到CPU或GPU中(依据执行场所确定)
4.利用offset-based LoD来设置LoD

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部