diff --git a/doc/fluid/advanced_usage/design_idea/fluid_design_idea.md b/doc/fluid/advanced_usage/design_idea/fluid_design_idea.md index 9fbcd8ac62433bb2c9e5f33b56fa31f904cfad0a..43feba2d523938425184c523e75af1758d1d4092 100644 --- a/doc/fluid/advanced_usage/design_idea/fluid_design_idea.md +++ b/doc/fluid/advanced_usage/design_idea/fluid_design_idea.md @@ -194,7 +194,7 @@ Fluid中使用fluid.Executor(place)创建Executor,place属性由用户定义 下例代码表示创建一个Executor,其运行场所在CPU内: ```python -cpu=core.CPUPlace() +cpu=fluid.CPUPlace() exe = fluid.Executor(cpu) ``` @@ -329,7 +329,7 @@ Fluid使用Executor来执行网络训练,Executor运行细节请参考[Executo 创建Executor只需调用 fluid.Executor(place) 即可,在此之前请您依据训练场所定义place变量: ```python #在CPU内执行训练 - cpu = fluid.core.CPUPlace() + cpu = fluid.CPUPlace() #创建Executor exe = fluid.Executor(cpu) ``` diff --git a/doc/fluid/advanced_usage/design_idea/fluid_design_idea_en.md b/doc/fluid/advanced_usage/design_idea/fluid_design_idea_en.md index b1d8f99770ab98d917e092a86bfcf0b002f40376..a19dd48ac25da0830a50271139bab8e3ecf2a032 100644 --- a/doc/fluid/advanced_usage/design_idea/fluid_design_idea_en.md +++ b/doc/fluid/advanced_usage/design_idea/fluid_design_idea_en.md @@ -195,7 +195,7 @@ Fluid uses Fluid.Executor(place) to create an Executor. The place attribute is d The following code example creates an Executor that runs on CPU: ```python -cpu=core.CPUPlace() +cpu=fluid.CPUPlace() exe = fluid.Executor(cpu) ``` @@ -330,7 +330,7 @@ Fluid uses Executor to perform network training. For details on Executor operati To create an Executor, simply call fluid.Executor(place). Before that, please define a place variable based on the training site: ```python #Execute training on CPU - cpu = fluid.core.CPUPlace() + cpu = fluid.CPUPlace() #Create Executor exe = fluid.Executor(cpu) ``` diff --git a/doc/fluid/advanced_usage/development/new_op/new_op.md b/doc/fluid/advanced_usage/development/new_op/new_op.md index ae42ee5162ac8052f2c28843725ccdd79bd46b58..5d36ed14a90d1cf150ce535f9ca5abbf656ec671 100644 --- a/doc/fluid/advanced_usage/development/new_op/new_op.md +++ b/doc/fluid/advanced_usage/development/new_op/new_op.md @@ -120,7 +120,7 @@ $$Out = scale*X$$ 这个例子有`AddAttr("scale", "...").SetDefault(1.0);` : 增加`scale`系数,作为参数属性,并且设置默认值为1.0。 ### 定义GradProtoMaker类 -每个Op的必须有一个对应的GraProtoMaker,若未定制对应前向Op的GradProtoMaker,fluid提供了DefaultGradProtoMaker,默认注册会使用全部输入输出,包括Input, Output, Output@Grad等,使用不需要的变量的会造成显存浪费。 +每个Op的必须有一个对应的GradProtoMaker,若未定制对应前向Op的GradProtoMaker,fluid提供了DefaultGradProtoMaker,默认注册会使用全部输入输出,包括Input, Output, Output@Grad等,使用不需要的变量的会造成显存浪费。 下面示例定义了ScaleOp的GradProtoMaker。 ```cpp @@ -230,7 +230,7 @@ Op的输入和输出可分别通过`ExecutionContext::Input()`和`ExecutionCo `MulOp`的CPU、CUDA实现共享同一个`Kernel`。`OpKernel`不共享的例子可以参考:[`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/cross_entropy_op.h#L43)。 -为了使`OpKernel`的计算过程书写更加简单,并且CPU、CUDA的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/dev/use_eigen_cn.md)。 +为了使`OpKernel`的计算过程书写更加简单,并且CPU、CUDA的代码可以复用,我们通常借助 Eigen unsupported Tensor模块来实现`Compute`接口。关于在PaddlePaddle中如何使用Eigen库,请参考[使用文档](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/use_eigen_cn.md)。 到此,前向Op实现完成。接下来,需要在`.cc`文件中注册该op和kernel。 反向Op类的定义,反向OpKernel的定义与前向Op类似,这里不再赘述。**但需注意反向Op没有`ProtoMaker`**。 diff --git a/doc/fluid/advanced_usage/development/new_op/new_op_en.md b/doc/fluid/advanced_usage/development/new_op/new_op_en.md index 6b1a51b0abe20c4c6904b98a9d69b1eab77c0827..89e150df45e8a842d8ceb0a63c748eb2cf94d803 100644 --- a/doc/fluid/advanced_usage/development/new_op/new_op_en.md +++ b/doc/fluid/advanced_usage/development/new_op/new_op_en.md @@ -103,7 +103,7 @@ The equation is: Out = X * Y The constructor utilizes `AddInput` to add input parameter, `AddOutput` to add output parameter, and `AddComment` to add comments for the Op, so that the corresponding information will be added to `OpProto`. -The code above adds two inputs `X` and `Y` to `MulOp`, an output `Out`, and their corresponding descriptions. Names are given in accordance to Paddle's [naming convention](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/dev/name_convention.md). +The code above adds two inputs `X` and `Y` to `MulOp`, an output `Out`, and their corresponding descriptions. Names are given in accordance to Paddle's [naming convention](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/name_convention.md). An additional example [`ScaleOp`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/scale_op.cc#L38-L55) is implemented as follows: @@ -134,7 +134,7 @@ Note `AddAttr("scale", "...").SetDefault(1.0);` adds `scale`constant a ### Defining the GradProtoMaker class -Each Op must have a corresponding GraProtoMaker. If GradProtoMaker corresponding to the forward Op is not customized, Fluid provides DefaultGradProtoMaker. The default registration will use all input and output, including Input, Output, Output@Grad and so on. Using unnecessary variables will cause waste of memory. +Each Op must have a corresponding GradProtoMaker. If GradProtoMaker corresponding to the forward Op is not customized, Fluid provides DefaultGradProtoMaker. The default registration will use all input and output, including Input, Output, Output@Grad and so on. Using unnecessary variables will cause waste of memory. The following example defines ScaleOp's GradProtoMaker. ```cpp @@ -244,7 +244,7 @@ Note that **different devices (CPU, CUDA)share one Op definition; whether or not `MulOp`'s CPU and CUDA share the same `Kernel`. A non-sharing `OpKernel` example can be seen in [`OnehotCrossEntropyOpKernel`](https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/fluid/operators/cross_entropy_op.cc). -To ease the writing of `OpKernel` compute, and for reusing code cross-device, [`Eigen-unsupported Tensor`](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md?fileviewer=file-view-default) module is used to implement `Compute` interface. To learn about how the Eigen library is used in PaddlePaddle, please see [usage document](https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/fluid/dev/use_eigen_en.md). +To ease the writing of `OpKernel` compute, and for reusing code cross-device, [`Eigen-unsupported Tensor`](https://bitbucket.org/eigen/eigen/src/default/unsupported/Eigen/CXX11/src/Tensor/README.md?fileviewer=file-view-default) module is used to implement `Compute` interface. To learn about how the Eigen library is used in PaddlePaddle, please see [usage document](https://github.com/PaddlePaddle/FluidDoc/blob/release/1.2/doc/fluid/dev/use_eigen_cn.md). This concludes the forward implementation of an operator. Next its operation and kernel need to be registered in a `.cc` file. @@ -460,7 +460,7 @@ If it is not necessary or concise description is enough to clearly express the a 2.Using developer-defined variable abbreviations in error messages is not easy to understand. - Example of the problem: + Example of the problem: ``` PADDLE_ENFORCE(forward_pd != nullptr, "Fail to find eltwise_fwd_pd in device context"); //eltwise_fwd_pduser may not be understood @@ -481,7 +481,7 @@ If it is not necessary or concise description is enough to clearly express the a -#### Special Instructions for OP InferShape Check Message +#### Special Instructions for OP InferShape Check Message - Check input and output variables, please follow the following format `Input(variable name) of OP name operator should not be null.` diff --git a/doc/fluid/api_cn/data/data_reader_cn.rst b/doc/fluid/api_cn/data/data_reader_cn.rst new file mode 100644 index 0000000000000000000000000000000000000000..98414582c30185d46b49d03c814f2d546ef5796e --- /dev/null +++ b/doc/fluid/api_cn/data/data_reader_cn.rst @@ -0,0 +1,366 @@ +################# +Data Reader +################# + + +.. _cn_api_paddle_data_reader_datafeeder: + +DataFeeder +================================== + +.. py:class:: paddle.fluid.data_feeder.DataFeeder(feed_list, place, program=None) + + +DataFeeder将读卡器返回的数据转换为可以输入Executor和ParallelExecutor的数据结构。读卡器通常返回一个小批量数据条目列表。列表中的每个数据条目都是一个样本。每个样本都是具有一个或多个特征的列表或元组。 + +简单用法如下: + +**代码示例** + +.. code-block:: python + + place = fluid.CPUPlace() + img = fluid.layers.data(name='image', shape=[1, 28, 28]) + label = fluid.layers.data(name='label', shape=[1], dtype='int64') + feeder = fluid.DataFeeder([img, label], fluid.CPUPlace()) + result = feeder.feed([([0] * 784, [9]), ([1] * 784, [1])]) + + +如果您想在使用多个GPU训练模型时预先将数据单独输入GPU端,可以使用decorate_reader函数。 + + +**代码示例** + +.. code-block:: python + + place=fluid.CUDAPlace(0) + feeder = fluid.DataFeeder(place=place, feed_list=[data, label]) + reader = feeder.decorate_reader( + paddle.batch(flowers.train(), batch_size=16)) + + +参数: + - **feed_list** (list) – 将输入模型的变量或变量的名称。 + - **place** (Place) – place表示将数据输入CPU或GPU,如果要将数据输入GPU,请使用fluid.CUDAPlace(i)(i表示GPU的ID),如果要将数据输入CPU,请使用fluid.CPUPlace()。 + - **program** (Program) –将数据输入的Program,如果Program为None,它将使用default_main_program() 。默认值None. + +抛出异常: ``ValueError`` – 如果某些变量未在Program中出现 + + +**代码示例** + +.. code-block:: python + + # ... + place = fluid.CPUPlace() + feed_list = [ + main_program.global_block().var(var_name) for var_name in feed_vars_name + ] # feed_vars_name is a list of variables' name. + feeder = fluid.DataFeeder(feed_list, place) + for data in reader(): + outs = exe.run(program=main_program, + feed=feeder.feed(data)) + + + +.. py:method:: feed(iterable) + +根据feed_list和iterable,将输入转换成一个数据结构,该数据结构可以输入Executor和ParallelExecutor。 + +参数: + - **iterable** (list|tuple) – 输入的数据 + +返回: 转换结果 + +返回类型: dict + + + +.. py:method:: feed_parallel(iterable, num_places=None) + +需要多个mini-batches。每个mini-batch都将提前在每个设备上输入。 + +参数: + - **iterable** (list|tuple) – 输入的数据 + - **num_places** (int) – 设备编号,默认值为None。 + +返回: 转换结果 + +返回类型: dict + + + +.. note:: + + 设备数量和mini-batches数量必须一致。 + +.. py:method:: decorate_reader(reader, multi_devices, num_places=None, drop_last=True) + +将输入数据转换成读卡器返回的多个mini-batches。每个mini-batch + +参数: + - **reader** (function) – reader是可以生成数据的函数 + - **multi_devices** (bool) – 是否用多个设备 + - **num_places** (int) – 如果multi_devices是True, 你可以指定GPU的使用数量, 如果multi_devices是None, 会使用当前机器的所有GPU ,默认值None。 + - **drop_last** (bool) – 如果最后一个batch的大小小于batch_size,是否删除最后一个batch,默认值True。 + +返回: 转换结果 + +返回类型: dict + +引起异常: ValueError – 如果drop_last为False并且数据批不适合设备。 + + +.. _cn_api_paddle_data_reader_reader: + +Reader +================================== + +在训练和测试时,PaddlePaddle需要读取数据。为了简化用户编写数据读取代码的工作,我们定义了 + + - reader是一个读取数据(从文件、网络、随机数生成器等)并生成数据项的函数。 + - reader creator是返回reader函数的函数。 + - reader decorator是一个函数,它接受一个或多个读卡器,并返回一个读卡器。 + - batch reader是一个函数,它读取数据(从读卡器、文件、网络、随机数生成器等)并生成一批数据项。 + + +Data Reader Interface +------------------------------------ + +的确,数据阅读器不必是读取和生成数据项的函数,它可以是任何不带参数的函数来创建一个iterable(任何东西都可以被用于 ``for x in iterable`` ): + +.. code-block:: python + + iterable = data_reader() + +从iterable生成的元素应该是单个数据条目,而不是mini batch。数据输入可以是单个项目,也可以是项目的元组,但应为 `支持的类型 `_ (如, numpy 1d array of float32, int, list of int) + + +单项目数据读取器创建者的示例实现: + +.. code-block:: python + + def reader_creator_random_image(width, height): + def reader(): + while True: + yield numpy.random.uniform(-1, 1, size=width*height) + return reader + + +多项目数据读取器创建者的示例实现: + +.. code-block:: python + + 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 + +.. py:function:: paddle.reader.map_readers(func, *readers) + +创建使用每个数据读取器的输出作为参数输出函数返回值的数据读取器。 + +参数: + - **func** - 使用的函数. 函数类型应为(Sample) => Sample + - **readers** - 其输出将用作func参数的读卡器。 + +类型:callable + +返回: 被创建数据的读取器 + +返回类型: callable + + +.. py:function:: paddle.reader.buffered(reader, size) + +创建缓冲数据读取器。 + +缓冲数据读卡器将读取数据条目并将其保存到缓冲区中。只要缓冲区不为空,就将继续从缓冲数据读取器读取数据。 + +参数: + - **reader** (callable) - 要读取的数据读取器 + - **size** (int) - 最大缓冲 + + +返回:缓冲数据的读取器 + + +.. py:function:: paddle.reader.compose(*readers, **kwargs) + +创建一个数据读卡器,其输出是输入读卡器的组合。 + +如果输入读卡器输出以下数据项:(1,2)3(4,5),则组合读卡器将输出:(1,2,3,4,5) + +参数: + - **readers** - 将被组合的多个读取器 + - **check_alignment** (bool) - 如果为True,将检查输入读卡器是否正确对齐。如果为False,将不检查对齐,将丢弃跟踪输出。默认值True。 + +返回:新的数据读取器 + +引起异常: ``ComposeNotAligned`` – 读卡器的输出不一致。 当check_alignment设置为False,不会升高。 + + + +.. py:function:: paddle.reader.chain(*readers) + +创建一个数据读卡器,其输出是链接在一起的输入数据读卡器的输出。 + +如果输入读卡器输出以下数据条目:[0,0,0][1,1,1][2,2,2],链接读卡器将输出:[0,0,0,1,1,1,2,2,2] + +参数: + - **readers** – 输入的数据 + +返回: 新的数据读取器 + +返回类型: callable + + +.. py:function:: paddle.reader.shuffle(reader, buf_size) + +创建数据读取器,该阅读器的数据输出将被无序排列。 + +由原始读卡器创建的迭代器的输出将被缓冲到shuffle缓冲区,然后进行打乱。打乱缓冲区的大小由参数buf_size决定。 + +参数: + - **reader** (callable) – 输出会被打乱的原始读卡器 + - **buf_size** (int) – 打乱缓冲器的大小 + +返回: 输出会被打乱的读卡器 + +返回类型: callable + + + +.. py:function:: paddle.reader.firstn(reader, n) + +限制读卡器可以返回的最大样本数。 + +参数: + - **reader** (callable) – 要读取的数据读取器 + - **n** (int) – 返回的最大样本数 + +返回: 装饰读卡器 + +返回类型: callable + + + + +.. py:function:: paddle.reader.xmap_readers(mapper, reader, process_num, buffer_size, order=False) + + + +.. py:class:: paddle.reader.PipeReader(command, bufsize=8192, file_type='plain') + + +PipeReader通过流从一个命令中读取数据,将它的stdout放到管道缓冲区中,并将其重定向到解析器进行解析,然后根据需要的格式生成数据。 + + +您可以使用标准Linux命令或调用其他Program来读取数据,例如通过HDFS、CEPH、URL、AWS S3中读取: + +**代码示例** + +.. code-block:: python + + def example_reader(): + for f in myfiles: + pr = PipeReader("cat %s"%f) + for l in pr.get_line(): + sample = l.split(" ") + yield sample + + +.. py:method:: get_line(cut_lines=True, line_break='\n') + +param cut_lines: + cut buffer to lines + +type cut_lines: bool + +param line_break: + line break of the file, like + +or + +type line_break: + string + +return: one line or a buffer of bytes + +rtype: string + + + +.. py:function:: paddle.reader.multiprocess_reader(readers, use_pipe=True, queue_size=1000) + +多进程读卡器使用python多进程从读卡器中读取数据,然后使用multi process.queue或multi process.pipe合并所有数据。进程号等于输入读卡器的编号,每个进程调用一个读卡器。 + +multiprocess.queue需要/dev/shm的rw访问权限,某些平台不支持。 + +您需要首先创建多个读卡器,这些读卡器应该相互独立,这样每个进程都可以独立工作。 + +**代码示例** + +.. code-block:: python + + reader0 = reader(["file01", "file02"]) + reader1 = reader(["file11", "file12"]) + reader1 = reader(["file21", "file22"]) + reader = multiprocess_reader([reader0, reader1, reader2], + queue_size=100, use_pipe=False) + + + +.. py:class::paddle.reader.Fake + +Fake读卡器将缓存它读取的第一个数据,并将其输出data_num次。它用于缓存来自真实阅读器的数据,并将其用于速度测试。 + +参数: + - **reader** – 原始读取器 + - **data_num** – 读卡器产生数据的次数 + +返回: 一个Fake读取器 + + +**代码示例** + +.. code-block:: python + + def reader(): + for i in range(10): + yield i + + fake_reader = Fake()(reader, 100) + + +Creator包包含一些简单的reader creator,可以在用户Program中使用。 + + + +.. py:function:: paddle.reader.creator.np_array(x) + +如果是numpy向量,则创建一个生成x个元素的读取器。或者,如果它是一个numpy矩阵,创建一个生成x行元素的读取器。或由最高维度索引的任何子超平面。 + +参数: + - **x** – 用于创建读卡器的numpy数组 + +返回: 从x创建的数据读取器 + + +.. py:function:: paddle.reader.creator.text_file(path) + +创建从给定文本文件逐行输出文本的数据读取器。将删除每行的行尾的(‘\n’)。 + +路径:文本文件的路径 + +返回: 文本文件的数据读取器 + + +.. py:function:: paddle.reader.creator.recordio(paths, buf_size=100) + +从给定的recordio文件路径创建数据读卡器,用“,”分隔“,支持全局模式。 + +路径:recordio文件的路径,可以是字符串或字符串列表。 + +返回: recordio文件的数据读取器 \ No newline at end of file diff --git a/doc/fluid/api_cn/data/dataset_cn.rst b/doc/fluid/api_cn/data/dataset_cn.rst new file mode 100644 index 0000000000000000000000000000000000000000..2ca58b5e628db53c01224487f536dc1c4163f124 --- /dev/null +++ b/doc/fluid/api_cn/data/dataset_cn.rst @@ -0,0 +1,532 @@ +################# +dataset +################# + + +.. _cn_api_paddle_dataset_mnist: + +mnist +------------------------------- + +MNIST数据集。 + +此模块将从 http://yann.lecun.com/exdb/mnist/ 下载数据集,并将训练集和测试集解析为paddle reader creator。 + + + +.. py:function:: paddle.dataset.mnist.train() + +MNIST训练数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +返回: 训练数据的reader creator + +返回类型:callable + + + +.. py:function:: paddle.dataset.mnist.test() + +MNIST测试数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +返回: 测试数据集的reader creator + +返回类型:callable + + + +.. py:function:: paddle.dataset.mnist.convert(path) + +将数据集转换为recordio格式。 + + + +.. _cn_api_paddle_dataset_cifar: + +cifar +------------------------------- + +CIFAR数据集。 + +此模块将从 https://www.cs.toronto.edu/~kriz/cifar.html 下载数据集,并将训练集和测试集解析为paddle reader creator。 + +cifar-10数据集由10个类别的60000张32x32彩色图像组成,每个类别6000张图像。共有5万张训练图像,1万张测试图像。 + +cifar-100数据集与cifar-10类似,只是它有100个类,每个类包含600张图像。每个类有500张训练图像和100张测试图像。 + + + +.. py:function:: paddle.dataset.cifar.train100() + +CIFAR-100训练数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +返回: 训练数据集的reader creator。 + +返回类型:callable + + +.. py:function:: paddle.dataset.cifar.test100() + +CIFAR-100测试数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +返回: 测试数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.cifar.train10(cycle=False) + +CIFAR-10训练数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +参数: + - **cycle** (bool) – 是否循环使用数据集 + +返回: 训练数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.cifar.test10(cycle=False) + +CIFAR-10测试数据集的creator。 + +它返回一个reader creator, reader中的每个样本的图像像素范围是[0,1],标签范围是[0,9]。 + +参数: + - **cycle** (bool) – 是否循环使用数据集 + +返回: 测试数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.cifar.convert(path) + +将数据集转换为recordio格式。 + + + +.. _cn_api_paddle_dataset_Conll05: + +Conll05 +------------------------------- + +Conll05数据集。Paddle深度学习基础中的语义角色标注文档使用这个数据集为例。因为Conll05数据集不是免费公开的,所以默认下载的url是Conll05的测试集(它是公开的)。用户可以将url和md5更改为其Conll数据集。并采用基于维基百科语料库的预训练词向量模型对SRL模型进行初始化。 + + +.. py:function:: paddle.dataset.conll05.get_dict() + +获取维基百科语料库的单词、动词和标签字典。 + + +.. py:function:: paddle.dataset.conll05.get_embedding() + +获取基于维基百科语料库的训练词向量。 + + + +.. py:function:: paddle.dataset.conll05.test() + +Conll05测试数据集的creator。 + +因为训练数据集不是免费公开的,所以用测试数据集进行训练。它返回一个reader creator,reader中的每个样本都有九个特征,包括句子序列、谓词、谓词上下文、谓词上下文标记和标记序列。 + +返回: 训练数据集的reader creator + +返回类型:callable + + + +.. _cn_api_paddle_dataset_imdb: + +imdb +------------------------------- + +IMDB数据集。 + +本模块的数据集从 http://ai.stanford.edu/%7Eamaas/data/sentiment/IMDB 数据集。这个数据集包含了一组25000个用于训练的极性电影评论数据和25000个用于测试的评论数据。此外,该模块还提供了用于构建词典的API。 + + +.. py:function:: paddle.dataset.imdb.build_dict(pattern, cutoff) + +从语料库构建一个单词字典,词典的键是word,值是这些单词从0开始的ID。 + + +.. py:function:: paddle.dataset.imdb.train(word_idx) + +IMDB训练数据集的creator。 + + +它返回一个reader creator, reader中的每个样本的是一个从0开始的ID序列,标签范围是[0,1]。 + + +参数: + - **word_idx** (dict) – 词典 + +返回: 训练数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.imdb.test(word_idx) + +IMDB测试数据集的creator。 + +它返回一个reader creator, reader中的每个样本的是一个从0开始的ID序列,标签范围是[0,1]。 + +参数: + - **word_idx** (dict) – 词典 + +返回: 训练数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.imdb.convert(path) + +将数据集转换为recordio格式。 + + +.. _cn_api_paddle_dataset_imikolov: + +imikolov +------------------------------- + +imikolov的简化版数据集。 + +此模块将从 http://www.fit.vutbr.cz/~imikolov/rnnlm/ 下载数据集,并将训练集和测试集解析为paddle reader creator。 + +.. py:function:: paddle.dataset.imikolov.build_dict(min_word_freq=50) + +从语料库构建一个单词字典,字典的键是word,值是这些单词从0开始的ID。 + +.. py:function:: paddle.dataset.imikolov.train(word_idx, n, data_type=1) + +imikolov训练数据集的creator。 + +它返回一个reader creator, reader中的每个样本的是一个单词ID元组。 + +参数: + - **word_idx** (dict) – 词典 + - **n** (int) – 如果类型是ngram,表示滑窗大小;否则表示序列最大长度 + - **data_type** (数据类型的成员变量(NGRAM 或 SEQ)) – 数据类型 (ngram 或 sequence) + +返回: 训练数据集的reader creator + +返回类型:callable + +.. py:function::paddle.dataset.imikolov.test(word_idx, n, data_type=1) + +imikolov测试数据集的creator。 + +它返回一个reader creator, reader中的每个样本的是一个单词ID元组。 + +参数: + - **word_idx** (dict) – 词典 + - **n** (int) – 如果类型是ngram,表示滑窗大小;否则表示序列最大长度 + - **data_type** (数据类型的成员变量(NGRAM 或 SEQ)) – 数据类型 (ngram 或 sequence) + +返回: 测试数据集的reader creator + +返回类型:callable + + +.. py:function:: paddle.dataset.imikolov.convert(path) + +将数据集转换为recordio格式。 + + + +.. _cn_api_paddle_dataset_movielens: + +movielens +------------------------------- + + +Movielens 1-M数据集。 + +Movielens 1-M数据集是由GroupLens Research采集的6000个用户对4000个电影的的100万个评级。 该模块将从 http://files.grouplens.org/datasets/movielens/ml-1m.zip 下载Movielens 1-M数据集,并将训练集和测试集解析为paddle reader creator。 + + +.. py:function:: paddle.dataset.movielens.get_movie_title_dict() + +获取电影标题词典。 + +.. py:function:: paddle.dataset.movielens.max_movie_id() + +获取电影ID的最大值。 + + +.. py:function:: paddle.dataset.movielens.max_user_id() + +获取用户ID的最大值。 + + +.. py:function:: paddle.dataset.movielens.max_job_id() + +获取职业ID的最大值。 + + +.. py:function:: paddle.dataset.movielens.movie_categories() + +获取电影类别词典。 + +.. py:function:: paddle.dataset.movielens.user_info() + +获取用户信息词典。 + +.. py:function:: paddle.dataset.movielens.movie_info() + +获取电影信息词典。 + +.. py:function:: paddle.dataset.movielens.convert(path) + +将数据集转换为recordio格式。 + +.. py:class:: paddle.dataset.movielens.MovieInfo(index, categories, title) + +电影ID,标题和类别信息存储在MovieInfo中。 + + +.. py:class:: paddle.dataset.movielens.UserInfo(index, gender, age, job_id) + +用户ID,性别,年龄和工作信息存储在UserInfo中。 + + + +.. _cn_api_paddle_dataset_sentiment: + +sentiment +------------------------------- + +脚本获取并预处理由NLTK提供的movie_reviews数据集。 + + +.. py:function:: paddle.dataset.sentiment.get_word_dict() + +按照样本中出现的单词的频率对单词进行排序。 + +返回: words_freq_sorted + +.. py:function:: paddle.dataset.sentiment.train() + +默认的训练集reader creator。 + +.. py:function:: paddle.dataset.sentiment.test() + +默认的测试集reader creator。 + +.. py:function:: paddle.dataset.sentiment.convert(path) + +将数据集转换为recordio格式。 + + + +.. _cn_api_paddle_dataset_uci_housing: + +uci_housing +------------------------------- + + + +UCI Housing数据集。 + +该模块将从 https://archive.ics.uci.edu/ml/machine-learning-databases/housing/下载数据集,并将训练集和测试集解析为paddle reader creator。 + + + +.. py:function:: paddle.dataset.uci_housing.train() + +UCI_HOUSING训练集creator。 + +它返回一个reader creator,reader中的每个样本都是正则化和价格编号后的特征。 + +返回:训练集reader creator + +返回类型:callable + + + +.. py:function:: paddle.dataset.uci_housing.test() + + +UCI_HOUSING测试集creator。 + +它返回一个reader creator,reader中的每个样本都是正则化和价格编号后的特征。 + + +返回:测试集reader creator + +返回类型:callable + + + + + + +.. _cn_api_paddle_dataset_wmt14: + +wmt14 +------------------------------- + +WMT14数据集。 原始WMT14数据集太大,所以提供了一组小数据集。 该模块将从 http://paddlepaddle.cdn.bcebos.com/demo/wmt_shrinked_data/wmt14.tgz 下载数据集,并将训练集和测试集解析为paddle reader creator。 + + +.. py:function:: paddle.dataset.wmt14.train(dict_size) + +WMT14训练集creator。 + +它返回一个reader creator,reader中的每个样本都是源语言单词ID序列,目标语言单词ID序列和下一个单词ID序列。 + +返回:训练集reader creator + +返回类型:callable + + + +.. py:function:: paddle.dataset.wmt14.test(dict_size) + + +WMT14测试集creator。 + +它返回一个reader creator,reader中的每个样本都是源语言单词ID序列,目标语言单词ID序列和下一个单词ID序列。 + +返回:测试集reader creator + +返回类型:callable + + + + +.. py:function:: paddle.dataset.wmt14.convert(path) + +将数据集转换为recordio格式。 + + + + + + +.. _cn_api_paddle_dataset_wmt16: + +wmt16 +------------------------------- + +ACL2016多模式机器翻译。 有关更多详细信息,请访问此网站:http://www.statmt.org/wmt16/multimodal-task.html#task1 + +如果您任务中使用该数据集,请引用以下文章:Multi30K:多语言英语 - 德语图像描述。 + +@article{elliott-EtAl:2016:VL16, author = {{Elliott}, D. and {Frank}, S. and {Sima”an}, K. and {Specia}, L.}, title = {Multi30K: Multilingual English-German Image Descriptions}, booktitle = {Proceedings of the 6th Workshop on Vision and Language}, year = {2016}, pages = {70–74}, year = 2016 +} + +.. py:function:: paddle.dataset.wmt16.train(src_dict_size, trg_dict_size, src_lang='en') + +WMT16训练集reader(读取器)。 + +此功能返回可读取训练数据的reader。 reader返回的每个样本由三个字段组成:源语言单词索引序列,目标语言单词索引序列和下一单词索引序列。 + +注意:训练数据的原始内容如下: http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/training.tar.gz + +paddle.dataset.wmt16使用moses的tokenization脚本提供原始数据集的tokenized版本: https://github.com/moses-smt/mosesdecoder/blob/master/scripts/tokenizer/tokenizer.perl + +参数: + - **src_dict_size** (int) – 源语言词典的大小。三个特殊标记将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **trg_dict_size** (int) – 目标语言字典的大小。三个特殊标记将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **src_lang** (string) – 一个字符串,指示哪种语言是源语言。 可用选项包括:英语为“en”,德国为“de”。 + +返回: 读训练集数据的reader + +返回类型: callable + + + +.. py:function:: paddle.dataset.wmt16.test(src_dict_size, trg_dict_size, src_lang='en') + + +WMT16测试(test)集reader。 + +此功能返回可读取测试数据的reader。reader返回的每个样本由三个字段组成:源语言单词索引序列,目标语言单词索引序列和下一单词索引序列。 + +注意:原始测试数据如下: http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/mmt16_task1_test.tar.gz + +paddle.dataset.wmt16使用moses的tokenization脚本提供原始数据集的tokenized版本: https://github.com/moses-smt/mosesdecoder/blob/master/scripts/tokenizer/tokenizer.perl + + +参数: + - **src_dict_size** (int) – 源语言词典的大小。三个特殊token将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **trg_dict_size** (int) – 目标语言字典的大小。三个特殊token将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **src_lang** (string) – 一个字符串,指示哪种语言是源语言。 可用选项包括:英语为“en”,德国为“de”。 + + +返回: 读测试集数据的reader + +返回类型: callable + + +.. py:function:: paddle.dataset.wmt16.validation(src_dict_size, trg_dict_size, src_lang='en') + +WMT16验证(validation)集reader。 + +此功能返回可读取验证数据的reader 。reader返回的每个样本由三个字段组成:源语言单词索引序列,目标语言单词索引序列和下一单词索引序列。 + +注意:验证数据的原始内容如下:http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/validation.tar.gz + +paddle.dataset.wmt16使用moses的tokenization脚本提供原始数据集的tokenized版本:https://github.com/moses-smt/mosesdecoder/blob/master/scripts/tokenizer/tokenizer.perl + + + +参数: + - **src_dict_size** (int) – 源语言词典的大小。三个特殊token将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **trg_dict_size** (int) – 目标语言字典的大小。三个特殊token将被添加到所述词典:为起始标记,为结束标记,为未知单词。 + - **src_lang** (string) – 一个字符串,指示哪种语言是源语言。 可用选项包括:英语为“en”,德国为“de”。 + + +返回: 读集数据的reader + +返回类型: callable + + + + + + + +.. py:function:: paddle.dataset.wmt16.get_dict(lang, dict_size, reverse=False) + + +返回指定语言的词典(word dictionary)。 + + +参数: + - **lang** (string) - 表示哪种语言是源语言的字符串。 可用选项包括:英语为“en”,德国为“de”。 + - **dict_size** (int) - 指定语言字典的大小。 + - **reverse** (bool) - 如果reverse设置为False,则返回的python字典将使用word作为键并使用index作为值。 如果reverse设置为True,则返回的python字典将使用index作为键,将word作为值。 + +返回:特定语言的单词词典。 + +返回类型: dict + + + + +.. py:function:: paddle.dataset.wmt16.fetch() + +下载完整的数据集。 + + +.. py:function:: paddle.dataset.wmt16.convert(path, src_dict_size, trg_dict_size, src_lang) + + +将数据集转换为recordio格式。 + + + diff --git a/doc/fluid/api_cn/index_cn.rst b/doc/fluid/api_cn/index_cn.rst index 5686f640f8faa04ad5496f65c785a311ddb06a90..2fdcfe1b01c468e2a87601fbb5569b55e79c2128 100644 --- a/doc/fluid/api_cn/index_cn.rst +++ b/doc/fluid/api_cn/index_cn.rst @@ -21,3 +21,5 @@ API profiler_cn.rst regularizer_cn.rst transpiler_cn.rst + data/dataset_cn.rst + data/data_reader_cn.rst diff --git a/doc/fluid/api_cn/layers_cn.rst b/doc/fluid/api_cn/layers_cn.rst index e383514eaa41825122d3b7391b02990a2bb7f945..3591c06cd7ec53f1d7ae4af2de824a9ebfdf799b 100644 --- a/doc/fluid/api_cn/layers_cn.rst +++ b/doc/fluid/api_cn/layers_cn.rst @@ -79,9 +79,9 @@ array_read .. code-block:: python - tmp = fluid.layers.zeros(shape=[10],dtype='int32') + array = fluid.layers.create_array(dtype='float32') i = fluid.layers.fill_constant(shape=[1],dtype='int64',value=10) - arr = layers.array_read(tmp,i=i) + item = fluid.layers.array_read(array, i) diff --git a/doc/fluid/beginners_guide/basics/image_classification/index_en.md b/doc/fluid/beginners_guide/basics/image_classification/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..5a881dd1b57952beb7fde4fba408b065887ad257 --- /dev/null +++ b/doc/fluid/beginners_guide/basics/image_classification/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/03.image_classification/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/basics/index_en.rst b/doc/fluid/beginners_guide/basics/index_en.rst new file mode 100644 index 0000000000000000000000000000000000000000..97efb54d132e5a7185fe39fd0b0c6702a1e5a44e --- /dev/null +++ b/doc/fluid/beginners_guide/basics/index_en.rst @@ -0,0 +1,99 @@ +########################## +Basic Deep Learning Models +########################## + +This section collects six documents arranging from the simplest to the most challenging, which will guide you through the basic deep learning tasks in PaddlePaddle. + +The documentation in this chapter covers a lot of deep learning basics and how to implement them with PaddlePaddle. See the instructions below for how to use: + + +Overview +====================== + +The book you are reading is an "interactive" e-book - each chapter can be run in a Jupyter Notebook. + +.. toctree:: + :titlesonly: + + image_classification/index_en.md + word2vec/index_en.md + recommender_system/index_en.md + understand_sentiment/index_en.md + label_semantic_roles/index_en.md + machine_translation/index_en.md + + +We packaged Jupyter, PaddlePaddle, and various dependency softwares into a Docker image. It frees you from installing these softwares by yourself, and you only need to just install Docker. For various Linux versions, please refer to https://www.docker.com . If you use docker on `Windows `_ or `Mac `_ , consider `allocate more Memory and CPU resources to Docker `_ . + + +Instructions +====================== + + +This book assumes you are performing CPU training by default. If you want to use GPU training, the steps will vary slightly. Please refer to "GPU Training" below. + + + + + +CPU training +>>>>>>>>>>>> + +Just run these in shell: + +.. code-block:: shell + + docker run -d -p 8888:8888 paddlepaddle/book + +It downloads the Docker image for running books from DockerHub.com. +To read and edit this book on-line, please visit http://localhost:8888 in your browser. + +If the Internet connection to DockerHub.com is compromised, try our spare docker image named docker.paddlepaddlehub.com: + +:: + + docker run -d -p 8888:8888 docker.paddlepaddlehub.com/book + + +GPU training +>>>>>>>>>>>>> + +To ensure that the GPU driver works properly in the image, we recommend running the image with `nvidia docker `_ . Please install nvidia-docker first, then run: + + +:: + + nvidia-docker run -d -p 8888:8888 paddlepaddle/book:latest-gpu + + +Or use a image source in China to run: + +:: + + nvidia-docker run -d -p 8888:8888 docker.paddlepaddlehub.com/book:latest-gpu + + +modify the following codes + +.. code-block:: python + + use_cuda = False + + +into : + +.. code-block:: python + + use_cuda = True + + + +Contribute to Book +=================== + +We highly appreciate your original contributions of new chapters to Book! Just Pull Requests of your contributions to the sub-directory in :code:`pending` . When this chapter is endorsed, we'll gladly move it to the root directory. + + +For writing, running, debugging, you need to install `shell `_ to generate Docker image。 + +**Please Note:** We also provide `English Readme `_ for PaddlePaddle book diff --git a/doc/fluid/beginners_guide/basics/label_semantic_roles/index_en.md b/doc/fluid/beginners_guide/basics/label_semantic_roles/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..4f309fd57f1d17554bc7dd389993feaafde12c0e --- /dev/null +++ b/doc/fluid/beginners_guide/basics/label_semantic_roles/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/07.label_semantic_roles/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/basics/machine_translation/index_en.md b/doc/fluid/beginners_guide/basics/machine_translation/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..af007364d0336337933e551f8808be97c67c7ea5 --- /dev/null +++ b/doc/fluid/beginners_guide/basics/machine_translation/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/08.machine_translation/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/basics/recommender_system/index_en.md b/doc/fluid/beginners_guide/basics/recommender_system/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..3892d78c0ed97e5faaf02032bfbb2a923472e2c9 --- /dev/null +++ b/doc/fluid/beginners_guide/basics/recommender_system/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/05.recommender_system/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/basics/understand_sentiment/index_en.md b/doc/fluid/beginners_guide/basics/understand_sentiment/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..f330a82500902d39a671b9632c4e432037be0a79 --- /dev/null +++ b/doc/fluid/beginners_guide/basics/understand_sentiment/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/06.understand_sentiment/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/basics/word2vec/index_en.md b/doc/fluid/beginners_guide/basics/word2vec/index_en.md new file mode 120000 index 0000000000000000000000000000000000000000..c2e95a166c25b4f2f105506576576575df0794e0 --- /dev/null +++ b/doc/fluid/beginners_guide/basics/word2vec/index_en.md @@ -0,0 +1 @@ +../../../../../external/book/04.word2vec/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/index_en.rst b/doc/fluid/beginners_guide/index_en.rst index 3e60ffb586203c21f805240926325c1b31548d7b..eaa0d1a0fa1bf4a63d30dbf5477a858b6aceab76 100644 --- a/doc/fluid/beginners_guide/index_en.rst +++ b/doc/fluid/beginners_guide/index_en.rst @@ -24,4 +24,6 @@ If you have been armed with certain level of deep learning knowledge, and it hap :hidden: install/index_en.rst + quick_start/index_en.rst + basics/index_en.rst programming_guide/programming_guide_en.md diff --git a/doc/fluid/beginners_guide/quick_start/fit_a_line/README.md b/doc/fluid/beginners_guide/quick_start/fit_a_line/README.md new file mode 120000 index 0000000000000000000000000000000000000000..2213def635a797869bc4d0648d15944b6ffbb6bf --- /dev/null +++ b/doc/fluid/beginners_guide/quick_start/fit_a_line/README.md @@ -0,0 +1 @@ +../../../../../external/book/01.fit_a_line/README.md \ No newline at end of file diff --git a/doc/fluid/beginners_guide/quick_start/index_en.rst b/doc/fluid/beginners_guide/quick_start/index_en.rst new file mode 100644 index 0000000000000000000000000000000000000000..6964c43def5240c8ba02aae7b4278f0747fa2817 --- /dev/null +++ b/doc/fluid/beginners_guide/quick_start/index_en.rst @@ -0,0 +1,13 @@ +############## +Quick Start +############## + +Welcome to Quick Start! + +This section will tutor you to invent your won models of classical *linear Regression* and *Handwritten Digits Recognition* tasks in PaddlePaddle Fluid. The following tutorials provide details on model definition, training, and inference in a friendly manner based on real-life datasets: + +.. toctree:: + :titlesonly: + + fit_a_line/README.md + recognize_digits/README.md diff --git a/doc/fluid/beginners_guide/quick_start/recognize_digits/README.md b/doc/fluid/beginners_guide/quick_start/recognize_digits/README.md new file mode 120000 index 0000000000000000000000000000000000000000..d1f0a628048cd174c612dbfe7c9a2dade023af4a --- /dev/null +++ b/doc/fluid/beginners_guide/quick_start/recognize_digits/README.md @@ -0,0 +1 @@ +../../../../../external/book/02.recognize_digits/README.md \ No newline at end of file diff --git a/doc/fluid/user_guides/howto/configure_simple_model/index.rst b/doc/fluid/user_guides/howto/configure_simple_model/index.rst index 5946a2ccb7e43004eae39ec4b3c6112c66c1fd04..dbac3a4db74e5c6fba7f160a988c1ef93a5867d8 100644 --- a/doc/fluid/user_guides/howto/configure_simple_model/index.rst +++ b/doc/fluid/user_guides/howto/configure_simple_model/index.rst @@ -25,7 +25,7 @@ | 优化算法 | 随机梯度下降 | +----------------+----------------------------------------------+ -使用PaddlePadle建模 +使用PaddlePaddle建模 ################### 从逻辑层面明确了输入数据格式、模型结构、损失函数以及优化算法后,需要使用PaddlePaddle提供的API及算子来实现模型逻辑。一个典型的模型主要包含4个部分,分别是:输入数据格式定义,模型前向计算逻辑,损失函数以及优化算法。 diff --git a/doc/fluid/user_guides/howto/prepare_data/use_py_reader.rst b/doc/fluid/user_guides/howto/prepare_data/use_py_reader.rst index 14a5a0c9cd139c96a440faf4ead6c5a6ac52c810..f44ea78910f19c33006fdd148d9bab2239856298 100644 --- a/doc/fluid/user_guides/howto/prepare_data/use_py_reader.rst +++ b/doc/fluid/user_guides/howto/prepare_data/use_py_reader.rst @@ -89,18 +89,20 @@ 设置PyReader对象的数据源 ################################ + PyReader对象通过 :code:`decorate_paddle_reader()` 或 :code:`decorate_tensor_provider()` 方法设置其数据源。 :code:`decorate_paddle_reader()` 和 :code:`decorate_tensor_provider()` 均接收Python生成器 :code:`generator` 作为参数, :code:`generator` 内部每次通过yield的方式生成一个batch的数据。 :code:`decorate_paddle_reader()` 和 :code:`decorate_tensor_provider()` 方法的区别在于: -- :code:`decorate_paddle_reader()` 的 :code:`generator` 应返回Numpy Array类型的数据,而 :code:`decorate_tensor_provider()` 的 :code:`generator` 应返回LoDTensor类型的数据。 +- :code:`decorate_paddle_reader()` 要求 :code:`generator` 返回的数据格式为[(img_1, label_1), (img_2, label_2), ..., (img_n, label_n)],其中img_i和label_i均为每个样本的Numpy Array类型数据,n为batch size。而 :code:`decorate_tensor_provider()` 要求 :code:`generator` 返回的数据的数据格式为[batched_imgs, batched_labels],其中batched_imgs和batched_labels为batch级的Numpy Array或LoDTensor类型数据。 -- :code:`decorate_tensor_provider()` 要求 :code:`generator` 返回的LoDTensor的数据类型、尺寸必须与配置py_reader时指定的dtypes、shapes参数相同,而 :code:`decorate_paddle_reader()` 不要求数据类型和尺寸的严格一致,其内部会完成数据类型和尺寸的转换。 +- :code:`decorate_tensor_provider()` 要求 :code:`generator` 返回的数据类型、尺寸必须与配置py_reader时指定的dtypes、shapes参数相同,而 :code:`decorate_paddle_reader()` 不要求数据类型和尺寸的严格一致,其内部会完成数据类型和尺寸的转换。 具体方式为: .. code-block:: python + import paddle.batch import paddle.fluid as fluid import numpy as np @@ -109,8 +111,8 @@ PyReader对象通过 :code:`decorate_paddle_reader()` 或 :code:`decorate_tensor # Case 1: Use decorate_paddle_reader() method to set the data source of py_reader # The generator yields Numpy-typed batched data def fake_random_numpy_reader(): - image = np.random.random(size=(BATCH_SIZE, 784)) - label = np.random.random_integers(size=(BATCH_SIZE, 1), low=0, high=9) + image = np.random.random(size=(784, )) + label = np.random.random_integers(size=(1, ), low=0, high=9) yield image, label py_reader1 = fluid.layers.py_reader( @@ -120,19 +122,14 @@ PyReader对象通过 :code:`decorate_paddle_reader()` 或 :code:`decorate_tensor name='py_reader1', use_double_buffer=True) - py_reader1.decorate_paddle_reader(fake_random_reader) + py_reader1.decorate_paddle_reader(paddle.batch(fake_random_reader, batch_size=BATCH_SIZE)) + # Case 2: Use decorate_tensor_provider() method to set the data source of py_reader # The generator yields Tensor-typed batched data def fake_random_tensor_provider(): image = np.random.random(size=(BATCH_SIZE, 784)).astype('float32') label = np.random.random_integers(size=(BATCH_SIZE, 1), low=0, high=9).astype('int64') - - image_tensor = fluid.LoDTensor() - image_tensor.set(image, fluid.CPUPlace()) - - label_tensor = fluid.LoDTensor() - label_tensor.set(label, fluid.CPUPlace()) yield image_tensor, label_tensor py_reader2 = fluid.layers.py_reader( diff --git a/external/book b/external/book index 2a1d135ccd10247954ba4cc5f870580a76b4530f..2a6a637dc9e70d8683536fa2ef4a6d1d74fca8e0 160000 --- a/external/book +++ b/external/book @@ -1 +1 @@ -Subproject commit 2a1d135ccd10247954ba4cc5f870580a76b4530f +Subproject commit 2a6a637dc9e70d8683536fa2ef4a6d1d74fca8e0