Paddle如何加快读取数据的速度?

  • 问题描述:在使用Fluid版的Paddle编写模型时,需要对数据进行增量处理,训练数据为图像数据,我对它们做了常规的变形操作,并使用多线程来加速,但感觉数据读取部分依旧很慢,如何解决?

  • 相关代码:

from PIL import Image
import numpy as np
import random

def train_mapper(sample):
    img, label = sample
    img = Image.open(img)
    r1 = random.random()
    if r1 > 0.5:
        img = img.transpose(Image.FLIP_LEFT_RIGHT)
    r2 = random.random()
    if r2 > 0.5:
        img = img.transpose(Image.FLIP_TOP_BOTTOM)

    img = np.array(img).astype(np.float32)
    #转成CHW
    img = img.transpose((2,0,1))
    img = img[(2,1,0),:,:] /255.
    return img, int(label)
  • 解决方法:

Paddle读入数据时使用PyReader对象而不是常见的executor.run(feed=...)方法来读取数据,PyReader对象读取数据使用的是异步方式,读取的速度回快上许多。示例代码如下:

import paddle.fluid as fluid

train_py_reader = fluid.layers.py_reader(capacity=64,
                                         shapes=[(-1,3,224,224), (-1,1)],
                                         dtypes=['float32', 'int64'],
                                         name='train',
                                         use_double_buffer=True)

test_py_reader = fluid.layers.py_reader(capacity=64,
                                        shapes=[(-1,3,224,224), (-1,1)],
                                        dtypes=['float32', 'int64'],
                                        name='test',
                                        use_double_buffer=True)

你可能感兴趣的:(PaddlePaddle,问答专区)