I have the following class:
class DataGenerator(keras.utils.Sequence):
__slots__ = 'path','batch_size','dim','mode','split_proportion','indices','processes'
def __init__(self, path: str,
batch_size: int,
dim: Tuple[int] = (12,86,98),
mode: str = 'train',
split_proportion: float = None,
indices: List[List[int]] = None,
processes: Optional[int] = None):
self._path = path
self._mode = mode
self._split_proportion = split_proportion
self._k_indices = indices
self._dim = dim
self._batch_size = batch_size
self._processes = processes
# Change mode to retrieve from folders
if mode == 'validation':
mode = 'train'
self._im_path = os.path.join(self._path, mode,'image')
self._msk_path = os.path.join(self._path, mode,'mask')
If I instantiate it, it should not have the attribute dict since it contains slots. However:
training_data = DataGenerator(path = '/path', batch_size = 1,
mode = 'train', split_proportion = 0.1)
training_data.__dict__
{'_path': '/path',
'_mode': 'train',
'_split_proportion': 0.1,
'_k_indices': None,
'_dim': (12, 86, 98),
'_batch_size': 1,
'_processes': None,
'_im_path': '/path/train/image',
'_msk_path': '/path/train/mask'}
Additionally, if I check memory requirements, they seem to be higher than without the slots.
# with __slots__
sys.getsizeof(training_data)
112
sys.getsizeof(training_data.__dict__)
152
# without __slots__
sys.getsizeof(training_data)
56
sys.getsizeof(training_data.__dict__)
152