• 使用DataFeeder传入训练/预测数据

    使用DataFeeder传入训练/预测数据

    Fluid提供 DataFeeder 类,将numpy array等数据转换为 LoDTensor 类型传入训练/预测网络。

    用户创建 DataFeeder 对象的方式为:

    1. import paddle.fluid as fluid
    2.  
    3. image = fluid.layers.data(name='image', shape=[-1, 3, 224, 224], dtype='float32')
    4. label = fluid.layers.data(name='label', shape=[-1, 1], dtype='int64')
    5. place = fluid.CUDAPlace(0) if fluid.core.is_compiled_with_cuda() else fluid.CPUPlace()
    6. feeder = fluid.DataFeeder(feed_list=[image, label], place=place)

    其中,feed_list 参数为变量列表,这些变量由 fluid.layers.data() 创建,place 参数表示应将Python端传入的numpy array等数据转换为GPU端或是CPU端的 LoDTensor 。创建 DataFeeder 对象后,用户可调用其 feed(iterable) 方法将用户传入的iterable 数据转换为 LoDTensor

    iterable 应为Python List或Tuple类型对象,且 iterable 的每个元素均为长度为N的Python List或Tuple类型对象,其中N为创建 DataFeeder 对象时传入的 feed_list 变量个数。

    iterable 的具体格式为:

    1. iterable = [
    2. (image_1, label_1),
    3. (image_2, label_2),
    4. ...
    5. (image_n, label_n)
    6. ]

    其中,image_ilabel_i 均为numpy array类型数据。若传入数据的维度为[1],如 label_i,则可传入Python int、float等类型数据。 image_ilabel_i 的数据类型和维度不必与 fluid.layers.data() 创建时指定的 dtypeshape 完全一致,DataFeeder 内部会完成数据类型和维度的转换。若 feed_list 中的变量的 lod_level 不为零,则Fluid会将经过维度转换后的iterable 中每行数据的第0维作为返回结果的 LoD

    具体使用方法请参见 DataFeeder 。