提交 563a5728 编写于 作者: G guofei 提交者: Zeng Jinle

Rewrite the content of PyReader_cn.rst develop=test (#1396)

* fix PyReader develop=test

* rewrite PyReader_cn.rst develop=test
上级 56b421a5
...@@ -23,7 +23,7 @@ PyReader ...@@ -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 .. code-block:: python
...@@ -35,6 +35,11 @@ PyReader ...@@ -35,6 +35,11 @@ PyReader
ITER_NUM = 5 ITER_NUM = 5
BATCH_SIZE = 3 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_creator_random_image_and_label(height, width):
def reader(): def reader():
for i in range(ITER_NUM): for i in range(ITER_NUM):
...@@ -55,8 +60,9 @@ PyReader ...@@ -55,8 +60,9 @@ PyReader
user_defined_reader = reader_creator_random_image_and_label(784, 784) user_defined_reader = reader_creator_random_image_and_label(784, 784)
reader.decorate_sample_list_generator( reader.decorate_sample_list_generator(
paddle.batch(user_defined_reader, batch_size=BATCH_SIZE)) 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()) executor.run(fluid.default_startup_program())
for i in range(EPOCH_NUM): for i in range(EPOCH_NUM):
reader.start() reader.start()
...@@ -80,26 +86,34 @@ PyReader ...@@ -80,26 +86,34 @@ PyReader
ITER_NUM = 5 ITER_NUM = 5
BATCH_SIZE = 10 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_creator_random_image(height, width):
def reader(): def reader():
for i in range(ITER_NUM): 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 return reader
image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') 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) user_defined_reader = reader_creator_random_image(784, 784)
reader.decorate_sample_list_generator( reader.decorate_sample_list_generator(
paddle.batch(user_defined_reader, batch_size=BATCH_SIZE), paddle.batch(user_defined_reader, batch_size=BATCH_SIZE),
fluid.core.CUDAPlace(0)) fluid.core.CPUPlace())
# 此处省略网络定义 loss = network(image, label)
executor = fluid.Executor(fluid.CUDAPlace(0)) executor = fluid.Executor(fluid.CPUPlace())
executor.run(fluid.default_main_program()) executor.run(fluid.default_startup_program())
for _ in range(EPOCH_NUM): for _ in range(EPOCH_NUM):
for data in reader(): for data in reader():
executor.run(feed=data) executor.run(feed=data, fetch_list=[loss])
3. return_list=True,返回值将用list表示而非dict,通常用于动态图模式中。 3. return_list=True,返回值将用list表示而非dict,通常用于动态图模式中。
...@@ -153,7 +167,7 @@ PyReader ...@@ -153,7 +167,7 @@ PyReader
reader.decorate_sample_list_generator( reader.decorate_sample_list_generator(
paddle.batch(generator, batch_size=BATCH_SIZE)) paddle.batch(generator, batch_size=BATCH_SIZE))
executor = fluid.Executor(fluid.CUDAPlace(0)) executor = fluid.Executor(fluid.CPUPlace())
executor.run(fluid.default_startup_program()) executor.run(fluid.default_startup_program())
for i in range(3): for i in range(3):
reader.start() reader.start()
...@@ -187,7 +201,7 @@ PyReader ...@@ -187,7 +201,7 @@ PyReader
reader.decorate_sample_list_generator( reader.decorate_sample_list_generator(
paddle.batch(generator, batch_size=BATCH_SIZE)) paddle.batch(generator, batch_size=BATCH_SIZE))
executor = fluid.Executor(fluid.CUDAPlace(0)) executor = fluid.Executor(fluid.CPUPlace())
executor.run(fluid.default_startup_program()) executor.run(fluid.default_startup_program())
for i in range(3): for i in range(3):
reader.start() reader.start()
...@@ -225,6 +239,11 @@ PyReader ...@@ -225,6 +239,11 @@ PyReader
ITER_NUM = 15 ITER_NUM = 15
BATCH_SIZE = 3 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 random_image_and_label_generator(height, width):
def generator(): def generator():
for i in range(ITER_NUM): for i in range(ITER_NUM):
...@@ -236,20 +255,20 @@ PyReader ...@@ -236,20 +255,20 @@ PyReader
return generator return generator
image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') 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) reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True)
user_defined_generator = random_image_and_label_generator(784, 784) user_defined_generator = random_image_and_label_generator(784, 784)
reader.decorate_sample_generator(user_defined_generator, reader.decorate_sample_generator(user_defined_generator,
batch_size=BATCH_SIZE, batch_size=BATCH_SIZE,
places=[fluid.CUDAPlace(0)]) places=[fluid.CPUPlace()])
# 省略了网络的定义 loss = network(image, label)
executor = fluid.Executor(fluid.CUDAPlace(0)) executor = fluid.Executor(fluid.CPUPlace())
executor.run(fluid.default_main_program()) executor.run(fluid.default_startup_program())
for _ in range(EPOCH_NUM): for _ in range(EPOCH_NUM):
for data in reader(): for data in reader():
executor.run(feed=data) executor.run(feed=data, fetch_list=[loss])
.. py:method:: decorate_sample_list_generator(reader, places=None) .. py:method:: decorate_sample_list_generator(reader, places=None)
...@@ -275,6 +294,11 @@ PyReader ...@@ -275,6 +294,11 @@ PyReader
ITER_NUM = 15 ITER_NUM = 15
BATCH_SIZE = 3 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 random_image_and_label_generator(height, width):
def generator(): def generator():
for i in range(ITER_NUM): for i in range(ITER_NUM):
...@@ -286,20 +310,20 @@ PyReader ...@@ -286,20 +310,20 @@ PyReader
return generator return generator
image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') 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) reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True)
user_defined_generator = random_image_and_label_generator(784, 784) user_defined_generator = random_image_and_label_generator(784, 784)
reader.decorate_sample_list_generator( reader.decorate_sample_list_generator(
paddle.batch(user_defined_generator, batch_size=BATCH_SIZE), paddle.batch(user_defined_generator, batch_size=BATCH_SIZE),
fluid.core.CUDAPlace(0)) fluid.core.CPUPlace())
# 省略了网络的定义 loss = network(image, label)
executor = fluid.Executor(fluid.core.CUDAPlace(0)) executor = fluid.Executor(fluid.core.CPUPlace())
executor.run(fluid.default_main_program()) executor.run(fluid.default_startup_program())
for _ in range(EPOCH_NUM): for _ in range(EPOCH_NUM):
for data in reader(): for data in reader():
executor.run(feed=data) executor.run(feed=data, fetch_list=[loss])
.. py:method:: decorate_batch_generator(reader, places=None) .. py:method:: decorate_batch_generator(reader, places=None)
...@@ -324,6 +348,11 @@ PyReader ...@@ -324,6 +348,11 @@ PyReader
ITER_NUM = 15 ITER_NUM = 15
BATCH_SIZE = 3 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 random_image_and_label_generator(height, width):
def generator(): def generator():
for i in range(ITER_NUM): for i in range(ITER_NUM):
...@@ -331,22 +360,25 @@ PyReader ...@@ -331,22 +360,25 @@ PyReader
high=255, high=255,
size=[BATCH_SIZE, height, width]) size=[BATCH_SIZE, height, width])
batch_label = np.ones([BATCH_SIZE, 1]) batch_label = np.ones([BATCH_SIZE, 1])
batch_image = batch_image.astype('float32')
batch_label = batch_label.astype('int64')
yield batch_image, batch_label yield batch_image, batch_label
return generator return generator
image = fluid.layers.data(name='image', shape=[784, 784], dtype='float32') 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) reader = fluid.io.PyReader(feed_list=[image, label], capacity=4, iterable=True)
user_defined_generator = random_image_and_label_generator(784, 784) user_defined_generator = random_image_and_label_generator(784, 784)
reader.decorate_batch_generator(user_defined_generator, fluid.CUDAPlace(0)) reader.decorate_batch_generator(user_defined_generator, fluid.CPUPlace())
# 省略了网络的定义
executor = fluid.Executor(fluid.CUDAPlace(0)) loss = network(image, label)
executor.run(fluid.default_main_program()) executor = fluid.Executor(fluid.CPUPlace())
executor.run(fluid.default_startup_program())
for _ in range(EPOCH_NUM): for _ in range(EPOCH_NUM):
for data in reader(): for data in reader():
executor.run(feed=data) executor.run(feed=data, fetch_list=[loss])
.. py:method:: next() .. py:method:: next()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册