11PyDataProvider2的使用
22=====================
33
4- PyDataProvider2是PaddlePaddle使用Python提供数据的接口 。该接口使用多线程读取数据,并提供了简单的Cache功能;同时可以使用户只关注如何从文件中读取每一条数据,而不用关心数据如何传输,如何存储等等。
4+ PyDataProvider2是PaddlePaddle使用Python提供数据的推荐接口 。该接口使用多线程读取数据,并提供了简单的Cache功能;同时可以使用户只关注如何从文件中读取每一条数据,而不用关心数据如何传输,如何存储等等。
55
66.. contents ::
77
88MNIST的使用场景
99---------------
1010
11- 我们以MNIST手写识别为例,来说明如何使用最简单的PyDataProvider2 。
11+ 我们以MNIST手写识别为例,来说明PyDataProvider2的简单使用场景 。
1212
1313样例数据
1414++++++++
@@ -17,7 +17,7 @@ MNIST是一个包含有70,000张灰度图片的数字分类数据集。样例数
1717
1818.. literalinclude :: mnist_train.txt
1919
20- 其中每行数据代表一张图片,行内使用 ``; `` 分成两部分。第一部分是图片的标签,为0-9中的一个数字;第二部分是28*28的图片像素灰度值。 对应的 ``train.list `` 为 :
20+ 其中每行数据代表一张图片,行内使用 ``; `` 分成两部分。第一部分是图片的标签,为0-9中的一个数字;第二部分是28*28的图片像素灰度值。 对应的 ``train.list `` 即为这个数据文件的名字 :
2121
2222.. literalinclude :: train.list
2323
@@ -40,7 +40,8 @@ dataprovider的使用
4040 - 该函数的功能是:打开文本文件,读取每一行,将行中的数据转换成与input_types一致的格式,然后返回给PaddlePaddle进程。注意,
4141
4242 - 返回的顺序需要和input_types中定义的顺序一致。
43- - 返回时,必须使用关键词 ``yield `` 。一次yield调用,即返回一条完整的样本。如果想为一个数据文件返回多条样本,只需要在函数中调用多次yield即可(本例中使用for循环进行多次调用)。
43+ - 返回时,必须使用Python关键词 ``yield `` ,相关概念是 ``generator `` 。
44+ - 一次yield调用,返回一条完整的样本。如果想为一个数据文件返回多条样本,只需要在函数中调用多次yield即可(本例中使用for循环进行多次调用)。
4445
4546 - 该函数具有两个参数:
4647
@@ -55,7 +56,20 @@ dataprovider的使用
5556.. literalinclude :: mnist_config.py
5657 :lines: 1-7
5758
58- 训练数据是 ``train.list `` ,测试数据没有,调用的PyDataProvider2是 ``mnist_provider `` 模块中的 ``process `` 函数。
59+ 训练数据是 ``train.list `` ,没有测试数据,调用的PyDataProvider2是 ``mnist_provider `` 模块中的 ``process `` 函数。
60+
61+ 小结
62+ +++++
63+
64+ 至此,简单的PyDataProvider2样例就说明完毕了。对用户来说,仅需要知道如何从 **一个文件 ** 中读取 **一条样本 ** ,就可以将数据传送给PaddlePaddle了。而PaddlePaddle则会帮用户做以下工作:
65+
66+ * 将数据组合成Batch进行训练
67+ * 对训练数据进行Shuffle
68+ * 多线程的数据读取
69+ * 缓存训练数据到内存(可选)
70+ * CPU->GPU双缓存
71+
72+ 是不是很简单呢?
5973
6074时序模型的使用场景
6175------------------
@@ -89,19 +103,6 @@ dataprovider的使用
89103.. literalinclude :: sentimental_config.py
90104 :emphasize-lines: 12-14
91105
92- 小结
93- -----
94-
95- 至此,两个PyDataProvider2的样例就说明完毕了。对用户来说,仅需要知道如何从 **一个文件 ** 中读取 **一条样本 ** ,就可以将数据传送给PaddlePaddle了。而PaddlePaddle则会帮用户做以下工作:
96-
97- * 将数据组合成Batch进行训练
98- * 对训练数据进行Shuffle
99- * 多线程的数据读取
100- * 缓存训练数据到内存(可选)
101- * CPU->GPU双缓存
102-
103- 是不是很简单呢?
104-
105106参考(Reference)
106107---------------
107108
@@ -167,6 +168,8 @@ init_hook可以传入一个函数。该函数在初始化的时候会被调用
167168 * PaddlePaddle定义的参数: 1)is_train:bool型参数,表示用于训练或预测;2)file_list:所有文件列表。
168169 * 用户定义的参数:使用args在网络配置中设置。
169170
171+ 注意:PaddlePaddle保留添加参数的权力,因此init_hook尽量使用 ``**kwargs `` 来接受不使用的函数以保证兼容性。
172+
170173cache
171174+++++
172175
0 commit comments