У меня много ошибок / проблем с генераторами Keras и мультиобработкой.
Я использовал:
history = model.fit(training_generator,
steps_per_epoch=trainingSetSize // batch_size,
epochs=epochs,
verbose=1,
validation_data=validationGenerator,
validation_steps= validationSetSize // batch_size,
callbacks=callbacks,
use_multiprocessing=True,
workers=nb_workers,
max_queue_size=2*nb_workers)
для запуска обучения.
My генератор плюется партиями (batch_size, 64,64,2) тензоров. Одной из проблем является то, что я замечаю следующие предупреждения / сообщения об ошибках:
Error occurred when finalizing GeneratorDataset iterator: Cancelled: Operation was cancelled
, хотя я добавил steps_per_epoch = X_size // batch_size,
Также добавив print () внутри генератора Я замечаю, что в конце эпохи он генерирует «пустой» тензор формы: (0,64,64,2) ...
Есть идеи, предложения / комментарии / ответы?
это код генератора:
class custom_gen(Sequence):
def __init__(self, fn, datasetSize, batch_size, trainingsetName,trainingsetTargetsName):
self.fn=fn
self.datasetSize= datasetSize
self.batch_size = batch_size
self.trainingsetTargetsName = trainingsetTargetsName
self.trainingsetName = trainingsetName
self.lock = threading.Lock()
#compulsory method: total number of batches that the generator must produce
def __len__(self):
return self.datasetSize // self.batch_size
#idx arg is managed by Python/Keras by themselves!?
def __getitem__(self, idx):
with self.lock:
f=h5py.File(self.fn,'r')
X=f[self.trainingsetName][idx * self.batch_size:(idx + 1) * self.batch_size]
Y=f[self.trainingsetTargetsName][idx * self.batch_size:(idx + 1) * self.batch_size]
print('Generated X.shape='+str(X.shape))
print('Generated Y.shape='+str(Y.shape))
return X,Y