Как заставить пользовательский генератор данных использовать все ядра процессора, используя model.fit_generator в Keras - PullRequest
0 голосов
/ 03 апреля 2019

правый.Итак, я работаю над проблемой, касающейся аудио, с использованием машинного обучения.Мой набор данных довольно большой, и он не подходит для моего барана.Поэтому я решил, что я сделаю для него специальный генератор данных, который затем передам в model.fit_generator Keras.

Однако я не уверен, как точно передать данные в fit_generator. * 1005.*

Другая проблема заключается в том, что функция dataset_creator_PP довольно дорогая с точки зрения процессорного времени, настолько, что она может стать препятствием для моих графических процессоров.Может ли fit_generator() Keras распараллелить мой пакетный процесс?Если так, то как?Или мне нужно использовать многопроцессорность для решения этой проблемы?Должен ли я просто удалить аргумент batch_size из моей функции и вместо этого сделать так, чтобы он выдавал только 1 файл за раз.Если это так, то кто будет отслеживать все файлы, которые были / не использовались для обучения?

Примечание. Некоторая информация, которую вы можете найти полезной - all_files: все имена файлов обучающих примеров (train_X) находятся в path_c1.выходные файлы (train_y) имеют одинаковые имена в path_c2 dataset_creator_PP, открывают эти файлы и затем выполняют тяжелую предварительную обработку.

Спасибо, что нашли время, чтобы прочитать и, надеюсь, поделиться ответом на этот вопрос.

Пожалуйста, найдите код ниже

Моя функция генератора

def audio_datagen(all_files, batch_size, path_c1, path_c2, sr, nfft, hop_len, mfcc_coefs):
    while True:
        # initialize batches of data:
        counter = 0
        stft_c1, stft_c2 = dataset_creator_PP(path_c1, path_c2, sr, nfft, hop_len,
                                              mfcc_coefs, all_files[(counter+0):(counter+batch_size)])

        counter += batch_size

        yeild stft_c2, stft_c1
...