感谢关注天善智能,走好数据之路↑↑↑
欢迎关注天善智能,我们是专注于商业智能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为例,为房价数据(斯坦福吴恩达的公开课第一课举例的数