Поскольку мой набор данных достаточно большой, чтобы вместить память, я пытаюсь использовать генератор данных с кератами для обработки набора данных обучения на лету перед отправкой их в модель. Проблема в том, что мой генератор пытается обработать все экземпляры набора данных перед началом обучения модели. И из-за размера набора данных я всегда получаю MemoryError.
Есть ли способ выполнить предварительную обработку небольшими партиями перед отправкой каждого пакета в модель?
Вот как я называю своюгенератор:
history = model.fit_generator(dataGen,
validation_data=dataGenTest,
epochs=N_EPOCHS,
callbacks=[mc],
verbose=2)
Вот мой генератор getitem метод:
def __getitem__(self, index):
batch_indexs = self.indexes[index * self.batch_size:(index + 1) * self.batch_size]
batch_X = [self.dataX[k] for k in batch_indexs]
y = np.array([self.dataY[k] for k in batch_indexs]
X = self.data_generation(batch_X)
return X, y
А вот мой генератор data_generation метод:
def data_generation(self, batch_X):
X = []
with self.graph.as_default():
for text in batch_X:
common_seg_input = np.zeros((1, 500), dtype=np.float32)
index, segment = self.tokenizer.encode(first=text, max_len=500)
w = self.bert_model.predict([[index],[segment]])[0]
X.append(w)
X = np.array(X)
return X