使用DataFeeder传入训练/预测数据¶
Fluid提供 DataFeeder
类,将numpy array等数据转换为 LoDTensor
类型传入训练/预测网络。
用户创建 DataFeeder
对象的方式为:
import paddle.fluid as fluid
image = fluid.layers.data(name='image', shape=[-1, 3, 224, 224], dtype='float32')
label = fluid.layers.data(name='label', shape=[-1, 1], dtype='int64')
place = fluid.CUDAPlace(0) if fluid.core.is_compiled_with_cuda() else fluid.CPUPlace()
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
的具体格式为:
iterable = [
(image_1, label_1),
(image_2, label_2),
...
(image_n, label_n)
]
其中,image_i
与 label_i
均为numpy array类型数据。若传入数据的维度为[1],如 label_i
,
则可传入Python int、float等类型数据。 image_i
与 label_i
的数据类型和维度不必
与 fluid.layers.data()
创建时指定的 dtype
和 shape
完全一致,DataFeeder
内部
会完成数据类型和维度的转换。若 feed_list
中的变量的 lod_level
不为零,则Fluid会将经过维度转换后的
iterable
中每行数据的第0维作为返回结果的 LoD
。
具体使用方法请参见 DataFeeder 。