出错信息如下:
AttributeError: Can't pickle local object 'multiprocess_reader.._read_into_queue'
代码如下:
import time
import paddle
import numpy as np
import paddle.fluid as fluid
import paddle.dataset.mnist as mnist
from paddle.fluid.io import multiprocess_reader
image = fluid.data(name='image', shape=[None,784], dtype='float32')
label = fluid.data(name='label', shape=[None,1], dtype='int64')
reader_list=[paddle.reader.shuffle(mnist.train(),buf_size=500) for id in range(2)]
multi_reader=paddle.reader.multiprocess_reader(reader_list, False)
data_reader = fluid.io.PyReader(feed_list=[image,label], capacity=2)
data_reader.decorate_sample_generator(multi_reader,batch_size=25,places=fluid.CPUPlace())
exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
total_count=0
t1=time.time()
for data in data_reader:
result,=exe.run(feed=data,fetch_list=[image])
total_count+=result.shape[0]
print("total_count:",total_count)
print("time:",time.time()-t1)
reader_list=[paddle.batch(it,batch_size=32) for it in reader_list]
total_count=0
t1=time.time()
for pass_id in range(len(reader_list)):
for id,data in enumerate(reader_list[pass_id]()):
total_count+=len(data)
print("total_count:", total_count)
print("time:", time.time() - t1)
请帮助解答一下 谢谢
这个意思是说, 您在windows下运行这个代码, 且使用了多线程?
可以尝试在代码放在
if __name__ == '__main__':
里面
pytorch使用多线程会因为没有保护而重复调用线程锁死的情况,不知道paddle会不会有相似的情况
没有缩进看着真困难
多线程在__main__下运行,不然会莫名其妙报错。