From 563a5728f65a1e9e19c94ee355587b9decce60ee Mon Sep 17 00:00:00 2001 From: guofei <52460041+gfwm2013@users.noreply.github.com> Date: Mon, 30 Sep 2019 21:29:38 +0800 Subject: [PATCH] Rewrite the content of PyReader_cn.rst develop=test (#1396) * fix PyReader develop=test * rewrite PyReader_cn.rst develop=test --- doc/fluid/api_cn/io_cn/PyReader_cn.rst | 120 ++++++++++++++++--------- 1 file changed, 76 insertions(+), 44 deletions(-) diff --git a/doc/fluid/api_cn/io_cn/PyReader_cn.rst b/doc/fluid/api_cn/io_cn/PyReader_cn.rst index 1869d4c9e..9f9fb25f7 100644 --- a/doc/fluid/api_cn/io_cn/PyReader_cn.rst +++ b/doc/fluid/api_cn/io_cn/PyReader_cn.rst @@ -23,7 +23,7 @@ PyReader **代码示例** -1.如果iterable=False,则创建的PyReader对象几乎与 ``fluid.layers.py_reader()`` 相同。算子将被插入program中。用户应该在每个epoch之前调用start(),并在epoch结束时捕获 ``Executor.run()`` 抛出的 ``fluid.core.EOFException `` 。一旦捕获到异常,用户应该调用reset()手动重置reader。 +1.如果iterable=False,则创建的PyReader对象几乎与 ``fluid.layers.py_reader()`` 相同。算子将被插入program中。用户应该在每个epoch之前调用 ``start()`` ,并在epoch结束时捕获 ``Executor.run()`` 抛出的 ``fluid.core.EOFException`` 。一旦捕获到异常,用户应该调用 ``reset()`` 手动重置reader。 .. code-block:: python @@ -34,6 +34,11 @@ PyReader EPOCH_NUM = 3 ITER_NUM = 5 BATCH_SIZE = 3 + + def network(image, label): + # 用户定义网络,此处以softmax回归为例 + predict = fluid.layers.fc(input=image, size=10, act='softmax') + return fluid.layers.cross_entropy(input=predict, label=label) def reader_creator_random_image_and_label(height, width): def reader(): @@ -55,8 +60,9 @@ PyReader user_defined_reader = reader_creator_random_image_and_label(784, 784) reader.decorate_sample_list_generator( paddle.batch(user_defined_reader, batch_size=BATCH_SIZE)) - # 此处省略网络定义 - executor = fluid.Executor(fluid.CUDAPlace(0)) + + loss = network(image, label) + executor = fluid.Executor(fluid.CPUPlace()) executor.run(fluid.default_startup_program()) for i in range(EPOCH_NUM): reader.start() @@ -80,26 +86,34 @@ PyReader ITER_NUM = 5 BATCH_SIZE = 10 + def network(image, label): + # 用户定义网络,此处以softmax回归为例 + predict = fluid.layers.fc(input=image, size=10, act='softmax') + return fluid.layers.cross_entropy(input=predict, label=label) + def reader_creator_random_image(height, width): def reader(): for i in range(ITER_NUM): - yield np.random.uniform(low=0, high=255, size=[height, width]), + fake_image = np.random.uniform(low=0, high=255, size=[height, width]), + fake_label = np.ones([1]) + yield fake_image, fake_label return reader image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') - reader = fluid.io.PyReader(feed_list=[image], capacity=4, iterable=True, return_list=False) + label = fluid.layers.data(name='label', shape=[1], dtype='int64') + reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True, return_list=False) user_defined_reader = reader_creator_random_image(784, 784) reader.decorate_sample_list_generator( paddle.batch(user_defined_reader, batch_size=BATCH_SIZE), - fluid.core.CUDAPlace(0)) - # 此处省略网络定义 - executor = fluid.Executor(fluid.CUDAPlace(0)) - executor.run(fluid.default_main_program()) + fluid.core.CPUPlace()) + loss = network(image, label) + executor = fluid.Executor(fluid.CPUPlace()) + executor.run(fluid.default_startup_program()) for _ in range(EPOCH_NUM): for data in reader(): - executor.run(feed=data) + executor.run(feed=data, fetch_list=[loss]) 3. return_list=True,返回值将用list表示而非dict,通常用于动态图模式中。 @@ -153,7 +167,7 @@ PyReader reader.decorate_sample_list_generator( paddle.batch(generator, batch_size=BATCH_SIZE)) - executor = fluid.Executor(fluid.CUDAPlace(0)) + executor = fluid.Executor(fluid.CPUPlace()) executor.run(fluid.default_startup_program()) for i in range(3): reader.start() @@ -175,19 +189,19 @@ PyReader import paddle import paddle.fluid as fluid import numpy as np - + BATCH_SIZE = 10 - + def generator(): for i in range(5): yield np.random.uniform(low=0, high=255, size=[784, 784]), - + image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') reader = fluid.io.PyReader(feed_list=[image], capacity=4, iterable=False) reader.decorate_sample_list_generator( paddle.batch(generator, batch_size=BATCH_SIZE)) - - executor = fluid.Executor(fluid.CUDAPlace(0)) + + executor = fluid.Executor(fluid.CPUPlace()) executor.run(fluid.default_startup_program()) for i in range(3): reader.start() @@ -224,7 +238,12 @@ PyReader EPOCH_NUM = 3 ITER_NUM = 15 BATCH_SIZE = 3 - + + def network(image, label): + # 用户定义网络,此处以softmax回归为例 + predict = fluid.layers.fc(input=image, size=10, act='softmax') + return fluid.layers.cross_entropy(input=predict, label=label) + def random_image_and_label_generator(height, width): def generator(): for i in range(ITER_NUM): @@ -234,22 +253,22 @@ PyReader fake_label = np.array([1]) yield fake_image, fake_label return generator - + image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') - label = fluid.layers.data(name='label', shape=[1], dtype='int32') + label = fluid.layers.data(name='label', shape=[1], dtype='int64') reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True) - + user_defined_generator = random_image_and_label_generator(784, 784) reader.decorate_sample_generator(user_defined_generator, batch_size=BATCH_SIZE, - places=[fluid.CUDAPlace(0)]) - # 省略了网络的定义 - executor = fluid.Executor(fluid.CUDAPlace(0)) - executor.run(fluid.default_main_program()) + places=[fluid.CPUPlace()]) + loss = network(image, label) + executor = fluid.Executor(fluid.CPUPlace()) + executor.run(fluid.default_startup_program()) for _ in range(EPOCH_NUM): for data in reader(): - executor.run(feed=data) + executor.run(feed=data, fetch_list=[loss]) .. py:method:: decorate_sample_list_generator(reader, places=None) @@ -274,7 +293,12 @@ PyReader EPOCH_NUM = 3 ITER_NUM = 15 BATCH_SIZE = 3 - + + def network(image, label): + # 用户定义网络,此处以softmax回归为例 + predict = fluid.layers.fc(input=image, size=10, act='softmax') + return fluid.layers.cross_entropy(input=predict, label=label) + def random_image_and_label_generator(height, width): def generator(): for i in range(ITER_NUM): @@ -284,22 +308,22 @@ PyReader fake_label = np.ones([1]) yield fake_image, fake_label return generator - + image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') - label = fluid.layers.data(name='label', shape=[1], dtype='int32') + label = fluid.layers.data(name='label', shape=[1], dtype='int64') reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True) - + user_defined_generator = random_image_and_label_generator(784, 784) reader.decorate_sample_list_generator( paddle.batch(user_defined_generator, batch_size=BATCH_SIZE), - fluid.core.CUDAPlace(0)) - # 省略了网络的定义 - executor = fluid.Executor(fluid.core.CUDAPlace(0)) - executor.run(fluid.default_main_program()) + fluid.core.CPUPlace()) + loss = network(image, label) + executor = fluid.Executor(fluid.core.CPUPlace()) + executor.run(fluid.default_startup_program()) for _ in range(EPOCH_NUM): for data in reader(): - executor.run(feed=data) + executor.run(feed=data, fetch_list=[loss]) .. py:method:: decorate_batch_generator(reader, places=None) @@ -323,7 +347,12 @@ PyReader EPOCH_NUM = 3 ITER_NUM = 15 BATCH_SIZE = 3 - + + def network(image, label): + # 用户定义网络,此处以softmax回归为例 + predict = fluid.layers.fc(input=image, size=10, act='softmax') + return fluid.layers.cross_entropy(input=predict, label=label) + def random_image_and_label_generator(height, width): def generator(): for i in range(ITER_NUM): @@ -331,24 +360,27 @@ PyReader high=255, size=[BATCH_SIZE, height, width]) batch_label = np.ones([BATCH_SIZE, 1]) + batch_image = batch_image.astype('float32') + batch_label = batch_label.astype('int64') yield batch_image, batch_label return generator - + image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') - label = fluid.layers.data(name='label', shape=[1], dtype='int32') + label = fluid.layers.data(name='label', shape=[1], dtype='int64') reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True) - + user_defined_generator = random_image_and_label_generator(784, 784) - reader.decorate_batch_generator(user_defined_generator, fluid.CUDAPlace(0)) - # 省略了网络的定义 - executor = fluid.Executor(fluid.CUDAPlace(0)) - executor.run(fluid.default_main_program()) + reader.decorate_batch_generator(user_defined_generator, fluid.CPUPlace()) + + loss = network(image, label) + executor = fluid.Executor(fluid.CPUPlace()) + executor.run(fluid.default_startup_program()) for _ in range(EPOCH_NUM): for data in reader(): - executor.run(feed=data) + executor.run(feed=data, fetch_list=[loss]) .. py:method:: next() -获取下一个数据。用户不应直接调用此方法。此方法用于PaddlePaddle框架内部实现Python 2.x的迭代器协议。 \ No newline at end of file +获取下一个数据。用户不应直接调用此方法。此方法用于PaddlePaddle框架内部实现Python 2.x的迭代器协议。 -- GitLab