|
|
|
@ -563,22 +563,26 @@ def _py_reader(capacity,
|
|
|
|
|
|
|
|
|
|
def start_provide_thread(func):
|
|
|
|
|
def __provider_thread__():
|
|
|
|
|
for tensors in func():
|
|
|
|
|
array = core.LoDTensorArray()
|
|
|
|
|
for item in tensors:
|
|
|
|
|
if not isinstance(item, core.LoDTensor):
|
|
|
|
|
tmp = core.LoDTensor()
|
|
|
|
|
tmp.set(item, core.CPUPlace())
|
|
|
|
|
item = tmp
|
|
|
|
|
|
|
|
|
|
array.append(item)
|
|
|
|
|
|
|
|
|
|
if reader.exited:
|
|
|
|
|
break
|
|
|
|
|
feed_queue.push(array)
|
|
|
|
|
if reader.exited:
|
|
|
|
|
break
|
|
|
|
|
feed_queue.close()
|
|
|
|
|
try:
|
|
|
|
|
for tensors in func():
|
|
|
|
|
array = core.LoDTensorArray()
|
|
|
|
|
for item in tensors:
|
|
|
|
|
if not isinstance(item, core.LoDTensor):
|
|
|
|
|
tmp = core.LoDTensor()
|
|
|
|
|
tmp.set(item, core.CPUPlace())
|
|
|
|
|
item = tmp
|
|
|
|
|
|
|
|
|
|
array.append(item)
|
|
|
|
|
|
|
|
|
|
if reader.exited:
|
|
|
|
|
break
|
|
|
|
|
feed_queue.push(array)
|
|
|
|
|
if reader.exited:
|
|
|
|
|
break
|
|
|
|
|
feed_queue.close()
|
|
|
|
|
except Exception as ex:
|
|
|
|
|
feed_queue.close()
|
|
|
|
|
raise ex
|
|
|
|
|
|
|
|
|
|
reader.thread = threading.Thread(target=__provider_thread__)
|
|
|
|
|
reader.thread.daemon = True
|
|
|
|
@ -692,6 +696,11 @@ def py_reader(capacity,
|
|
|
|
|
>>> exe.run(fetch_list=[loss.name])
|
|
|
|
|
>>> except fluid.core.EOFException:
|
|
|
|
|
>>> reader.reset()
|
|
|
|
|
>>>
|
|
|
|
|
>>> ...
|
|
|
|
|
>>>
|
|
|
|
|
>>> fluid.io.save_inference_model(dirname='./model', feeded_var_names=[img, label],
|
|
|
|
|
>>> target_vars=[loss], executor=fluid.Executor(fluid.CUDAPlace(0)))
|
|
|
|
|
|
|
|
|
|
2. When training and testing are both performed, two different
|
|
|
|
|
:code:`py_reader` should be created with different names, e.g.:
|
|
|
|
|