class DataIterator(DataIteratorBase): # 继承了DataIteratorBase Class def __init__(self, global_config, config, shuffle=True, augment=True, batch_size=10, limit=None): super(DataIterator, self).__init__(global_config, batch_size) self.limit = limit self.records = 0 self.global_config = global_config self.config = config self.shuffle = shuffle self.augment = augment self.raw_data_iterator = RawDataIterator(self.global_config, self.config, shuffle=self.shuffle, augment=self.augment) self.generator = None def restart(self): self.records = 0 self.generator = self.raw_data_iterator.gen() def num_samples(self): return self.raw_data_iterator.num_keys() def _recv_arrays(self): while True: # 生成器需要是无限循环生成数据 if self.limit is not None and self.records > self.limit: raise StopIteration("Limit Reached") tpl = next( self.generator, None) # 因为raw_data_iterator.gen()具有关键字yield,所以自动支持next()方法 if tpl is not None: self.records += 1 return tpl # 返回了多个对象image, mask, labels, meta['joints'] raise StopIteration("Limited and reached cycle")
class DataIterator(DataIteratorBase): def __init__(self, global_config, config, shuffle=True, augment=True, batch_size=10, limit=None): super(DataIterator, self).__init__(global_config, batch_size) self.limit = limit self.records = 0 self.global_config = global_config self.config = config self.shuffle = shuffle self.augment = augment self.raw_data_iterator = RawDataIterator(self.global_config, self.config, shuffle=self.shuffle, augment=self.augment) self.generator = None def restart(self): self.records = 0 self.generator = self.raw_data_iterator.gen() def num_samples(self): return self.raw_data_iterator.num_keys() def _recv_arrays(self): while True: if self.limit is not None and self.records > self.limit: raise StopIteration("Limit Reached") tpl = next(self.generator, None) if tpl is not None: self.records += 1 return tpl raise StopIteration("Limited and reached cycle")