У меня есть собственный генератор, который читает файлы h5.
Кажется, что генератор довольно линейный, потому что данные не "рандомизированы"
Любой способ перемешать данные каждый раз при вводе новая эпоха?
class H5Gen(Sequence):
def __init__(self, src, n_classes=2,
batch_size=16,
hot=True,
augmenter=None,
pprocessors=None):
self.file = h5.File(src, 'r')
self.n_classes = n_classes
self.batch_size = batch_size
self.hot = hot
self.augmenter = augmenter
self.pprocessors = pprocessors
def __len__(self):
return int(np.floor(self.file['images'].shape[0] / self.batch_size))
def preprocess(self, X):
X_processed = []
for x in X:
for p in self.pprocessors:
x = p.preprocess(x)
X_processed.append(x)
return np.array(X_processed)
def hot_encode(self, y):
return to_categorical(y, num_classes=self.n_classes)
def __getitem__(self, index):
X = self.file['images'][index * self.batch_size: (index + 1) * self.batch_size]
y = self.file['labels'][index *self.batch_size: (index + 1) * self.batch_size]
if self.hot:
y = self.hot_encode(y)
if self.pprocessors is not None:
X = self.preprocess(X)
if self.augmenter is not None:
(X, y) = next(self.augmenter.flow(X, y, batch_size=self.batch_size))
return (X, y)