|
| 1 | +.. _api_guide_data_feeder: |
| 2 | + |
| 3 | +使用DataFeeder传入训练/预测数据 |
| 4 | +################################### |
| 5 | + |
| 6 | +Fluid提供 :code:`DataFeeder` 类,将numpy array等数据转换为 :code:`LoDTensor` 类型传入训练/预测网络。 |
| 7 | + |
| 8 | +用户创建 :code:`DataFeeder` 对象的方式为: |
| 9 | + |
| 10 | +.. code-block:: python |
| 11 | +
|
| 12 | + import paddle.fluid as fluid |
| 13 | +
|
| 14 | + image = fluid.layers.data(name='image', shape=[-1, 3, 224, 224], dtype='float32') |
| 15 | + label = fluid.layers.data(name='label', shape=[-1, 1], dtype='int64') |
| 16 | + place = fluid.CUDAPlace(0) if fluid.core.is_compiled_with_cuda() else fluid.CPUPlace() |
| 17 | + feeder = fluid.DataFeeder(feed_list=[image, label], place=place) |
| 18 | +
|
| 19 | +其中,:code:`feed_list` 参数为变量列表,这些变量由 :code:`fluid.layers.data()` 创建, |
| 20 | +:code:`place` 参数表示应将Python端传入的numpy array等数据转换为GPU端或是CPU端的 :code:`LoDTensor` 。 |
| 21 | +创建 :code:`DataFeeder` 对象后,用户可调用其 :code:`feed(iterable)` 方法将用户传入的 |
| 22 | +:code:`iterable` 数据转换为 :code:`LoDTensor`。 |
| 23 | + |
| 24 | +:code:`iterable` 应为Python List或Tuple类型对象,且 :code:`iterable` 的每个元素均为长度为N的 |
| 25 | +Python List或Tuple类型对象,其中N为创建 :code:`DataFeeder` 对象时传入的 :code:`feed_list` 变量个数。 |
| 26 | + |
| 27 | +:code:`iterable` 的具体格式为: |
| 28 | + |
| 29 | +.. code-block:: python |
| 30 | +
|
| 31 | + iterable = [ |
| 32 | + (image_1, label_1), |
| 33 | + (image_2, label_2), |
| 34 | + ... |
| 35 | + (image_n, label_n) |
| 36 | + ] |
| 37 | +
|
| 38 | +其中,:code:`image_i` 与 :code:`label_i` 均为numpy array类型数据。若传入数据的维度为[1],如 :code:`label_i`, |
| 39 | +则可传入Python int、float等类型数据。 :code:`image_i` 与 :code:`label_i` 的数据类型和维度不必 |
| 40 | +与 :code:`fluid.layers.data()` 创建时指定的 :code:`dtype` 和 :code:`shape` 完全一致,:code:`DataFeeder` 内部 |
| 41 | +会完成数据类型和维度的转换。若 :code:`feed_list` 中的变量的 :code:`lod_level` 不为零,则Fluid会将经过维度转换后的 |
| 42 | +:code:`iterable` 中每行数据的第0维作为返回结果的 :code:`LoD`。 |
| 43 | + |
| 44 | +具体使用方法请参见 :ref:`api_fluid_DataFeeder` 。 |
0 commit comments