1、数据读取
如何把数据放到模型里去训练呢?我们知道,基本的方法一般有两种:
- 一次性加载到内存:模型训练时直接从内存中取数据,不需要大量的IO消耗,速度快,适合少量数据。
- 加载到磁盘/HDFS/共享存储等:这样不用占用内存空间,在处理大量数据时一般采取这种方式,但是缺点是每次数据加载进来也是一次IO的开销,非常影响速度。
在PaddlePaddle中我们可以有三种模式来读取数据:分别是reader、reader creator和reader decorator,这三者有什么区别呢?
-
reader:从本地、网络、分布式文件系统HDFS等读取数据,也可随机生成数据,并返回一个或多个数据项。
-
reader creator:一个返回reader的函数。
-
reader decorator:装饰器,可组合一个或多个reader。
我们先以reader为例,为房价数据(斯坦福吴恩达的公开课第一课举例的数据)创建一个reader:
- 创建一个reader,实质上是一个迭代器,每次返回一条数据(此处以房价数据为例)
reader = paddle.dataset.uci_housing.train()
2. 创建一个shuffle_reader,把上一步的reader放进去,配置buf_size就可以读取buf_size大小的数据自动做shuffle,让数据打乱,随机化
shuffle_reader = paddle.reader.shuffle(reader,buf_size= 100)
3.创建一个batch_reader,把上一步混洗好的shuffle_reader放进去,给定batch_size,即可创建。
batch_reader = paddle.batch(shuffle_reader,batch_size = 2)
这三种方式也可以组合起来放一块:
reader = paddle.batch(
paddle.reader.shuffle(
uci_housing.train(),
buf_size = 100),
ba