-
问题描述:在使用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)