|
|
|
@ -502,51 +502,3 @@ class DataFeeder(object):
|
|
|
|
|
"not implemented")
|
|
|
|
|
|
|
|
|
|
return __reader_creator__
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NumpyToLoDTensorConverter(object):
|
|
|
|
|
def __init__(self, place):
|
|
|
|
|
self.place = place
|
|
|
|
|
self.data = []
|
|
|
|
|
self._reset()
|
|
|
|
|
|
|
|
|
|
def _reset(self):
|
|
|
|
|
self.data = []
|
|
|
|
|
|
|
|
|
|
def feed(self, data):
|
|
|
|
|
self.data.append(data)
|
|
|
|
|
|
|
|
|
|
def done(self):
|
|
|
|
|
arr = numpy.array(self.data)
|
|
|
|
|
t = core.LoDTensor()
|
|
|
|
|
t.set(arr, self.place)
|
|
|
|
|
self._reset()
|
|
|
|
|
return t
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DygraphListTensorProvider(object):
|
|
|
|
|
def __init__(self, generator, place):
|
|
|
|
|
self.generator = generator
|
|
|
|
|
self.converters = []
|
|
|
|
|
if place:
|
|
|
|
|
if isinstance(place, (core.CUDAPlace, core.CPUPlace)):
|
|
|
|
|
self.place = place
|
|
|
|
|
else:
|
|
|
|
|
raise ValueError("Please specify a valid place values \
|
|
|
|
|
such as core.CPUPlace or core.CUDAPlace")
|
|
|
|
|
else:
|
|
|
|
|
self.place = _current_expected_place()
|
|
|
|
|
|
|
|
|
|
def _read_data(self, iterable, place):
|
|
|
|
|
for items in iterable:
|
|
|
|
|
if len(self.converters) < len(items):
|
|
|
|
|
for _ in items:
|
|
|
|
|
self.converters.append(NumpyToLoDTensorConverter(place))
|
|
|
|
|
for each_converter, each_slot in six.moves.zip(self.converters,
|
|
|
|
|
items):
|
|
|
|
|
each_converter.feed(each_slot)
|
|
|
|
|
yield [c.done() for c in self.converters]
|
|
|
|
|
|
|
|
|
|
def __call__(self):
|
|
|
|
|
for batch in self.generator():
|
|
|
|
|
yield list(self._read_data(batch, self.place))
|
|
|
|
|