【深度学习系列】PaddlePaddle之数据预处理

本文详细介绍了如何使用PaddlePaddle进行数据预处理,包括数据类型、序列格式、数据读取方式(reader、reader creator、reader decorator)以及数据预处理实例。通过实例展示了如何处理手写数字数据集,以及如何创建文本数据的reader。文章强调了PaddlePaddle在数据预处理上的便利性,如数据打乱、批量处理和组合特征等特性。
摘要由CSDN通过智能技术生成

感谢关注天善智能,走好数据之路↑↑↑

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。


上篇文章讲了卷积神经网络的基本知识,本来这篇文章准备继续深入讲CNN的相关知识和手写CNN,但是有很多同学跟我发邮件或私信问我关于PaddlePaddle如何读取数据、做数据预处理相关的内容。网上看的很多教程都是几个常见的例子,数据集不需要自己准备,所以不需要关心,但是实际做项目的时候做数据预处理感觉一头雾水,所以我就写一篇文章汇总一下,讲讲如何用PaddlePaddle做数据预处理。

PaddlePaddle的基本数据格式

根据官网的资料,总结出PaddlePaddle支持多种不同的数据格式,包括四种数据类型和三种序列格式:

四种数据类型

dense_vector:稠密的浮点数向量。

sparse_binary_vector:稀疏的二值向量,即大部分值为0,但有值的地方必须为1。

sparse_float_vector:稀疏的向量,即大部分值为0,但有值的部分可以是任何浮点数。

integer:整型格式

api如下:

paddle.v2.data_type.dense_vector(dim, seq_type=0)

paddle.v2.data_type.sparse_vector(dim, seq_type=0)

dim(int) 向量维度

seq_type(int)输入的序列格式

说明:稠密向量,输入特征是一个稠密的浮点向量。举个例子,手写数字识别里的输入图片是28*28的像素,Paddle的神经网络的输入应该是一个784维的稠密向量。

参数:

返回类型:InputType

paddle.v2.data_type.sparse_binary_vector(dim, seq_type=0)

说明:稀疏的二值向量。输入特征是一个稀疏向量,这个向量的每个元素要么是0,要么是1

参数:同上

返回类型:同上

说明:稀疏向量,向量里大多数元素是0,其他的值可以是任意的浮点值

参数:同上

返回类型:同上

paddle.v2.data_type.integer_value(value_range, seq_type=0)

seq_type(int):输入的序列格式

value_range(int):每个元素的范围

说明:整型格式

参数:

返回类型:InputType

三种序列格式:

SequenceType.NO_SEQUENCE:不是一条序列

SequenceType.SEQUENCE:是一条时间序列

SequenceType.SUB_SEQUENCE: 是一条时间序列,且序列的每一个元素还是一个时间序列。

api如下:

paddle.v2.data_type.dense_vector_sequence(dim, seq_type=0)

说明:value_range(int):每个元素的范围

paddle.v2.data_type.integer_value_sequence(value_range, seq_type=0)

说明:稠密向量的序列格式

参数:dim(int):稠密向量的维度

返回类型:InputType

paddle.v2.data_type.sparse_binary_vector_sequence(dim, seq_type=0)

说明:稀疏的二值向量序列。每个序列里的元素要么是0要么是1

参数:dim(int):稀疏向量的维度

返回类型:InputType

paddle.v2.data_type.sparse_non_value_slot(dim, seq_type=0)

dim(int):稀疏向量的维度

seq_type(int):输入的序列格式

说明:稀疏的向量序列。每个序列里的元素要么是0要么是1

参数:

返回类型:InputType

paddle.v2.data_type.sparse_value_slot(dim, seq_type=0)

dim(int):稀疏向量的维度

seq_type(int):输入的序列格式

说明:稀疏的向量序列,向量里大多数元素是0,其他的值可以是任意的浮点值

参数:

返回类型:InputType

不同的数据类型和序列模式返回的格式不同,如下表:

其中f表示浮点数,i表示整数

注意:对sparse_binary_vector和sparse_float_vector,PaddlePaddle存的是有值位置的索引。例如,

对一个5维非序列的稀疏01向量[0, 1, 1, 0, 0],类型是sparse_binary_vector,返回的是[1, 2]。(因为只有第1位和第2位有值)

对一个5维非序列的稀疏浮点向量[0, 0.5, 0.7, 0, 0],类型是sparse_float_vector,返回的是[(1, 0.5), (2, 0.7)]。(因为只有第一位和第二位有值,分别是0.5和0.7)

PaddlePaddle的数据读取方式

我们了解了上文的四种基本数据格式和三种序列模式后,在处理自己的数据时可以根据需求选择,但是处理完数据后如何把数据放到模型里去训练呢?我们知道,基本的方法一般有两种:

一次性加载到内存:模型训练时直接从内存中取数据,不需要大量的IO消耗,速度快,适合少量数据。

加载到磁盘/HDFS/共享存储等:这样不用占用内存空间,在处理大量数据时一般采取这种方式,但是缺点是每次数据加载进来也是一次IO的开销,非常影响速度。

在PaddlePaddle中我们可以有三种模式来读取数据:分别是reader、reader creator和reader decorator,这三者有什么区别呢?

reader:从本地、网络、分布式文件系统HDFS等读取数据,也可随机生成数据,并返回一个或多个数据项。

reader creator:一个返回reader的函数。

reader decorator:装饰器,可组合一个或多个reader。

reader

我们先以reader为例,为房价数据(斯坦福吴恩达的公开课第一课举例的数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值