未验证 提交 f56f5f60 编写于 作者: X xujiaqi01 提交者: GitHub

fix Executor_cn and DataFeedDesc_cn api (#1389)

* fix train_from_dataset and infer_from_dataset
* fix DataFeedDesc, set_use_slot and desc
上级 8d2ccd5b
......@@ -128,51 +128,23 @@ Executor支持单GPU、多GPU以及CPU运行。在Executor构造时,需要传
outs = exe.run(feed={'X': x},
fetch_list=[loss.name])
.. py:method:: infer_from_dataset(program=None, dataset=None, scope=None, thread=0, debug=False, fetch_list=None, fetch_info=None, print_period=100)
infer_from_dataset的文档与train_from_dataset几乎完全相同,只是在分布式训练中,推进梯度将在infer_from_dataset中禁用。 infer_from_dataset()可以非常容易地用于多线程中的评估。
参数:
- **program** (Program|CompiledProgram) – 需要执行的program,如果没有给定那么默认使用default_main_program (未编译的)
- **dataset** (paddle.fluid.Dataset) – 在此函数外创建的数据集,用户应当在调用函数前提供完整定义的数据集。必要时请检查Dataset文件。默认为None
- **scope** (Scope) – 执行这个program的域,用户可以指定不同的域。默认为全局域
- **thread** (int) – 用户想要在这个函数中运行的线程数量。线程的实际数量为min(Dataset.thread_num, thread),如果thread > 0,默认为0
- **debug** (bool) – 是否开启debug模式,默认为False
- **fetch_list** (Variable List) – 返回变量列表,每个变量都会在训练过程中被打印出来,默认为None
- **fetch_info** (String List) – 每个变量的打印信息,默认为None
- **print_period** (int) – 每两次打印之间间隔的mini-batches的数量,默认为100
.. py:method:: train_from_dataset(program=None, dataset=None, scope=None, thread=0, debug=False, fetch_list=None, fetch_info=None, print_period=100)
返回:None
从预定义的数据集中训练。 数据集在Paddle的高性能IO模块paddle.fluid.dataset中定义。 给定Program(或CompiledProgram),train_from_dataset将使用paddle.fluid.dataset中的所有数据样本。输入scope可由用户给出, 默认情况下使用的scope是global_scope()。训练中的线程数是thread个, 默认值为0,表示使用paddle.fluid.dataset中用户配置的线程数。 可以设置debug,以便执行器显示所有算子的运行时间和当前训练任务的吞吐量。当用户设置fetch_list和fetch_info时
(两者长度需要一致)时,会打印出fetch_list中所有变量的值,打印该值的间隔为print_period。
**示例代码**
train_from_dataset的线程数可以与dataset的线程数不同,在本接口内会自动调整,用户可以灵活配置dataset的preload线程数、shuffle线程数、数据queue的数目,以及train_from_dataset的线程数。
.. code-block:: python
import paddle.fluid as fluid
place = fluid.CPUPlace() # 使用GPU时可设置place = fluid.CUDAPlace(0)
exe = fluid.Executor(place)
x = fluid.layers.data(name="x", shape=[10, 10], dtype="int64")
y = fluid.layers.data(name="y", shape=[1], dtype="int64", lod_level=1)
dataset = fluid.DatasetFactory().create_dataset()
dataset.set_use_var([x, y])
dataset.set_thread(1)
filelist = [] # 您可以设置您自己的filelist,如filelist = ["dataA.txt"]
dataset.set_filelist(filelist)
exe.run(fluid.default_startup_program())
exe.infer_from_dataset(program=fluid.default_main_program(),dataset=dataset)
.. py:method:: train_from_dataset(program=None, dataset=None, scope=None, thread=0, debug=False, fetch_list=None, fetch_info=None, print_period=100)
从预定义的数据集中训练。 数据集在paddle.fluid.dataset中定义。 给定程序(或编译程序),train_from_dataset将使用数据集中的所有数据样本。 输入范围可由用户给出。 默认情况下,范围是global_scope()。训练中的线程总数是thread。 训练中使用的线程数将是数据集中threadnum的最小值,同时也是此接口中线程的值。 可以设置debug,以便执行器显示所有算子的运行时间和当前训练任务的吞吐量。
train_from_dataset可以非常容易扩展到大规模分布式在线和离线训练。例如可以与Paddle Fleet配合使用,完成千亿或万亿级别大规模稀疏参数的CTR训练,并且性能出色。
注意:train_from_dataset将销毁每次运行在executor中创建的所有资源。
参数:
- **program** (Program|CompiledProgram) – 需要执行的program,如果没有给定那么默认使用default_main_program (未编译的)
- **dataset** (paddle.fluid.Dataset) – 在此函数外创建的数据集,用户应当在调用函数前提供完整定义的数据集。必要时请检查Dataset文件。默认为None
- **program** (Program|CompiledProgram) – 需要执行的program,如果没有给定那么默认使用default_main_program (类型是Program)
- **dataset** (paddle.fluid.Dataset) – 在此函数外创建的数据集,用户应当在调用函数前提供完整定义的Dataset。默认为None
- **scope** (Scope) – 执行这个program的域,用户可以指定不同的域。默认为全局域
- **thread** (int) – 用户想要在这个函数中运行的线程数量。线程的实际数量为min(Dataset.thread_num, thread),如果thread > 0,默认为0
- **thread** (int) – 用户想要在这个函数中运行的线程数量。默认为0,表示使用传入的dataset的线程数
- **debug** (bool) – 是否开启debug模式,默认为False
- **fetch_list** (Variable List) – 返回变量列表,每个变量都会在训练过程中被打印出来,默认为None
- **fetch_info** (String List) – 每个变量的打印信息,默认为None
......@@ -198,3 +170,37 @@ infer_from_dataset的文档与train_from_dataset几乎完全相同,只是在
exe.run(fluid.default_startup_program())
exe.train_from_dataset(program=fluid.default_main_program(),
dataset=dataset)
.. py:method:: infer_from_dataset(program=None, dataset=None, scope=None, thread=0, debug=False, fetch_list=None, fetch_info=None, print_period=100)
从预定义的数据集中做预测。 数据集在paddle.fluid.dataset中定义。infer_from_dataset的参数与train_from_dataset相同,两者的区别是infer_from_dataset>没有发送梯度和更新参数。infer_from_dataset可以非常容易地用于大规模分布式多线程中的离线评估。
参数:
- **program** (Program|CompiledProgram) – 需要执行的program,如果没有给定那么默认使用default_main_program (类型是Program)
- **dataset** (paddle.fluid.Dataset) – 在此函数外创建的数据集,用户应当在调用函数前提供完整定义Dataset。默认为None
- **scope** (Scope) – 执行这个program的域,用户可以指定不同的域。默认为全局域
- **thread** (int) – 用户想要在这个函数中运行的线程数量。线程的实际数量为min(Dataset.thread_num, thread),如果thread > 0,默认为0
- **debug** (bool) – 是否开启debug模式,默认为False
- **fetch_list** (Variable List) – 返回变量列表,每个变量都会在训练过程中被打印出来,默认为None
- **fetch_info** (String List) – 每个变量的打印信息,默认为None
- **print_period** (int) – 每两次打印之间间隔的mini-batches的数量,默认为100
返回:None
**示例代码**
.. code-block:: python
import paddle.fluid as fluid
place = fluid.CPUPlace() # 使用GPU时可设置place = fluid.CUDAPlace(0)
exe = fluid.Executor(place)
x = fluid.layers.data(name="x", shape=[10, 10], dtype="int64")
y = fluid.layers.data(name="y", shape=[1], dtype="int64", lod_level=1)
dataset = fluid.DatasetFactory().create_dataset()
dataset.set_use_var([x, y])
dataset.set_thread(1)
filelist = [] # 您可以设置您自己的filelist,如filelist = ["dataA.txt"]
dataset.set_filelist(filelist)
exe.run(fluid.default_startup_program())
exe.infer_from_dataset(program=fluid.default_main_program(),dataset=dataset)
......@@ -5,11 +5,7 @@ DataFeedDesc
.. py:class:: paddle.fluid.DataFeedDesc(proto_file)
数据描述符,描述输入训练数据格式。
这个类目前只用于AsyncExecutor(有关类AsyncExecutor的简要介绍,请参阅注释)
DataFeedDesc应由来自磁盘的有效protobuf消息初始化。
描述训练数据的格式。输入是一个文件路径名,其内容是protobuf message。
可以参考 :code:`paddle/fluid/framework/data_feed.proto` 查看我们如何定义message
......@@ -38,25 +34,22 @@ DataFeedDesc应由来自磁盘的有效protobuf消息初始化。
f.close()
data_feed = fluid.DataFeedDesc('data.proto')
但是,用户通常不应该关心消息格式;相反,我们鼓励他们在将原始日志文件转换为AsyncExecutor可以接受的训练文件的过程中,使用 :code:`Data Generator` 生成有效数据描述。
DataFeedDesc也可以在运行时更改。一旦你熟悉了每个字段的含义,您可以修改它以更好地满足您的需要。例如:
用户需要了解DataFeedDesc中每个字段的含义,以便自定义字段的值。例如:
.. code-block:: python
import paddle.fluid as fluid
data_feed = fluid.DataFeedDesc('data.proto')
data_feed.set_batch_size(128)
data_feed.set_dense_slots('wd') # 名为'wd'的slot将被设置为密集的
data_feed.set_use_slots('wd') # 名为'wd'的slot将被用于训练
# 最后,可以打印变量详细信息便于排出错误
data_feed.set_dense_slots('words') # 名为'words'的slot将被设置为密集的
data_feed.set_use_slots('words') # 名为'words'的slot将被用于训练
# 最后,可以打印变量详细信息便于排查错误
print(data_feed.desc())
参数:
- **proto_file** (string) - 包含数据feed中描述的磁盘文件
- **proto_file** (string) : 包含数据描述的protobuf message的磁盘文件
.. py:method:: set_batch_size(batch_size)
......@@ -139,7 +132,7 @@ DataFeedDesc也可以在运行时更改。一旦你熟悉了每个字段的含
设置一个特定的slot是否用于训练。一个数据集包含了很多特征,通过这个函数可以选择哪些特征将用于指定的模型。
参数:
- **use_slots_name** :将在训练中使用的slot名列表
- **use_slots_name** (list) : 将在训练中使用的slot名列表,类型为list,其中每个元素为一个字符串
**代码示例:**
......@@ -169,14 +162,14 @@ DataFeedDesc也可以在运行时更改。一旦你熟悉了每个字段的含
.. note::
默认值不用于所有slot
默认值是不使用所有slot
.. py:method:: desc()
返回此DataFeedDesc的protobuf信息
返回此DataFeedDesc的protobuf message
返回:一个message字符串
返回:一个protobuf message字符串
**代码示例:**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册