- Reader
- Data Reader Interface
- 方法
- paddle.reader.buffered(reader, size)
- paddle.reader.chain( *readers)
- paddle.reader.shuffle(reader, buf_size)
- paddle.reader.firstn(reader, n)
- paddle.reader.xmap_readers(mapper, reader, process_num, buffer_size, order=False)
- paddle.reader.PipeReader(command, bufsize=8192, file_type=’plain’)
- get_line(cut_lines=True, line_break=’n’)
- paddle.reader.multiprocess_reader(readers, use_pipe=True, queue_size=1000)
- paddle.reader.Fake
Reader
在训练和测试时,PaddlePaddle需要读取数据。为了简化用户编写数据读取代码的工作,我们定义了
- reader是一个读取数据(从文件、网络、随机数生成器等)并生成数据项的函数。
- reader creator是返回reader函数的函数。
- reader decorator是一个函数,它接受一个或多个reader,并返回一个reader。
- batch reader是一个函数,它读取数据(从reader、文件、网络、随机数生成器等)并生成一批数据项。
Data Reader Interface
的确,data reader不必是读取和生成数据项的函数,它可以是任何不带参数的函数来创建一个iterable(任何东西都可以被用于 for x in iterable
):
iterable = data_reader()
从iterable生成的元素应该是单个数据条目,而不是mini batch。数据输入可以是单个项目,也可以是项目的元组,但应为 Fluid目前支持的数据类型 (如, numpy 1d array of float32, int, list of int)
单项目数据读取器创建者的示例实现:
def reader_creator_random_image(width, height):
def reader():
while True:
yield numpy.random.uniform(-1, 1, size=width*height)
return reader
多项目数据读取器创建者的示例实现:
def reader_creator_random_image_and_label(width, height, label):
def reader():
while True:
yield numpy.random.uniform(-1, 1, size=width*height), label
return reader
方法
paddle.reader.buffered(reader, size)
创建缓冲数据读取器。
缓冲数据reader将读取数据条目并将其保存到缓冲区中。只要缓冲区不为空,就将继续从缓冲数据读取器读取数据。
参数
- reader (callable) - 要读取的数据读取器
- size (int) - 最大缓冲
返回 缓冲数据的读取器
paddle.reader.chain(*readers)
注意:paddle.reader.chain是paddle.fluid.io.chain的别名,推荐使用paddle.fluid.io.chain。
详见 chain 接口的使用文档。
paddle.reader.shuffle(reader, buf_size)
注意:paddle.reader.shuffle是paddle.fluid.io.shuffle的别名,推荐使用paddle.fluid.io.shuffle。
详见 shuffle 接口的使用文档。
paddle.reader.firstn(reader, n)
注意:paddle.reader.firstn是paddle.fluid.io.firstn的别名,推荐使用paddle.fluid.io.firstn。
详见 firstn 接口的使用文档。
paddle.reader.xmap_readers(mapper, reader, process_num, buffer_size, order=False)
通过多线程方式,通过用户自定义的映射器mapper来映射reader返回的样本(到输出队列)。
参数
- mapper (callable) - 一种映射reader数据的函数。
- reader (callable) - 产生数据的reader。
- process_num (int) - 用于处理样本的线程数目。
- buffer_size (int) - 存有待读取数据的队列的大小。
- order (bool) - 是否保持原始reader的数据顺序。 默认为False。
返回 一个将原数据进行映射后的decorated reader。
返回类型
callable
paddle.reader.PipeReader(command, bufsize=8192, file_type=’plain’)
PipeReader通过流从一个命令中读取数据,将它的stdout放到管道缓冲区中,并将其重定向到解析器进行解析,然后根据需要的格式生成数据。
您可以使用标准Linux命令或调用其他Program来读取数据,例如通过HDFS、CEPH、URL、AWS S3中读取:
代码示例
def example_reader():
for f in myfiles:
pr = PipeReader("cat %s"%f)
for l in pr.get_line():
sample = l.split(" ")
yield sample
get_line(cut_lines=True, line_break=’n’)
参数
- cut_lines (bool) - 将缓冲区分行。
- line_break (string) - 文件中的行分割符,比如 ‘\n’ 或者 ‘\r’。
返回 一行或者一段缓冲区。
返回类型
string
paddle.reader.multiprocess_reader(readers, use_pipe=True, queue_size=1000)
多进程reader使用python多进程从reader中读取数据,然后使用multi process.queue或multi process.pipe合并所有数据。进程号等于输入reader的编号,每个进程调用一个reader。
multiprocess.queue需要/dev/shm的rw访问权限,某些平台不支持。
您需要首先创建多个reader,这些reader应该相互独立,这样每个进程都可以独立工作。
代码示例
reader0 = reader(["file01", "file02"])
reader1 = reader(["file11", "file12"])
reader1 = reader(["file21", "file22"])
reader = multiprocess_reader([reader0, reader1, reader2],
queue_size=100, use_pipe=False)
paddle.reader.Fake
Fakereader将缓存它读取的第一个数据,并将其输出data_num次。它用于缓存来自真实reader的数据,并将其用于速度测试。
参数
- reader – 原始读取器。
- data_num – reader产生数据的次数 。
返回
一个Fake读取器
代码示例
def reader():
for i in range(10):
yield i
fake_reader = Fake()(reader, 100)