Я работаю над моделью Keras с изображениями, разделенными на участки.
У меня довольно своеобразный конвейер:
for i in range(n_iteration):
print("Epoch:", i, "/", n_iteration)
start = time.time()
self.train_batch, self.validation_batch = self.get_batch()
end = time.time()
print("Time for loading: ",end - start)
K.set_value(self.batch_source, self.train_batch[0][:self.batch_size])
K.set_value(self.batch_target, self.train_batch[0][self.batch_size:])
pred = self.model.predict(self.train_batch[0])
K.set_value(self.gamma, self.compute_gamma(pred))
hist = self.model.train_on_batch(self.train_batch[0], self.train_batch[1])
Мне нужно вычислить на основе прогноза моей модели за один раз t (для данногоbatch) определенное значение с именем gamma. Это значение затем учитывается в моей функции потерь, но его нельзя дифференцировать, поэтому я не могу интегрировать его вычисления в мою функцию потерь.
При измерении необходимого времени для загрузки и тренировки выясняется, что узкое место находится в фазе загрузки.
У меня вопрос: возможно ли загрузить несколько пакетов (функция self.get_batch () при вычислении прогноза, гаммы и обучения для другого пакета?
Я предполагаю, что идея заключается в создании некоторогосвоего рода очередь, в которой я храню свои партии, но я действительно не знаю, как это сделать.
PS: в моей функции get_batch я обращаюсь к файлу hdf5, может ли это вызвать какие-либо проблемы в многопроцессорной обработке?
Заранее спасибо.