2016-12-20 4 views
0

У меня есть два довольно больших PyTables EArrays, которые содержат входы и метки для задачи регрессии. Входной массив равен 4d (55k x 128 x 128 x 3), а массив меток - 1d (55k). У меня есть архитектура NN, указанная в Keras, которую я хочу обучать этим данным, но есть две проблемы.Как научить нейронную сеть в Keras по данным, хранящимся в файлах HDF5?

  1. Входной массив, по крайней мере, слишком большой, чтобы вставлять его в память сразу.
  2. Я только хочу тренироваться на каком-то случайном подмножестве полных данных, так как я хочу провести поезда, испытания и валидации. Я выбираю расщепления, разбивая на случайные подмножества индексов.

Как выбрать подмножества массивов HDF5 (ввод и вывод) в соответствии с показаниями поезда/теста и поезда на обучающих подмножествах, не считывая их сразу в памяти? Есть ли способ создать «представление» массива на диске, который можно отрезать и что Keras увидит в качестве обычного NumPy ndarray?

Что я пробовал до сих пор, это преобразовать мои массивы в объекты Keras HDF5Matrix (например, X = keras.utils.io_utils.HDF5Matrix(X)), но когда я затем нарезаю это, чтобы получить раскол обучения, полный фрагмент (80% от полного массива) помещенный в память, который дает мне MemoryError.

ответ

3

Вы можете использовать метод fit_generator вашей модели keras. Просто напишите свой собственный класс/функцию generator, который вытаскивает случайные партии образцов из вашего файла HDF5. Таким образом, вам никогда не придется иметь все данные в памяти сразу. Аналогично, если ваши данные проверки слишком велики для размещения в памяти, аргумент validation_data для fit_generator также принимает генератор, который производит партии из ваших данных валидации.

По сути, вам нужно всего лишь сделать np.random.shuffle по массиву индексов в свой набор данных, а затем разбить массив случайных индексов на тесты обучения, проверки и тестирования массивов. Ваши аргументы генератора до fit_generator просто вытаскивают партии из вашего файла HDF5 в соответствии с последовательными партиями индексов в массивах индексов обучения и проверки.