Лучшая практика для обучения работе с крупномасштабными наборами данных, такими как ImageNet, с использованием Theano/Lasagne?

Я обнаружил, что все примеры Theano/Lasagne имеют дело с небольшими наборами данных, такими как mnist и cifar10, которые можно полностью загрузить в память.

Мой вопрос: как написать эффективный код для обучения на больших наборах данных? В частности, как лучше всего подготовить мини-пакеты (включая увеличение данных в реальном времени), чтобы не нагружать GPU?

Может быть, как использовать ImageDataLayer CAFFE? Например, у меня есть большой текстовый файл, который содержит все пути к изображениям и метки. Было бы полезно показать код.

Большое спасибо!


person kli_nlpr    schedule 26.02.2016    source источник


Ответы (1)


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

Однако этого достаточно при расширении данных, так как это делается на лету. Из-за глобальной блокировки интерпретатора Python изображения не могут быть загружены и предварительно обработаны, пока GPU занят. Лучший способ обойти это, о котором я знаю, - это библиотека Fuel. Fuel загружает и предварительно обрабатывает мини-пакеты в другом процессе Python, а затем передает их в процесс обучения через сокет TCP: http://fuel.readthedocs.org/en/latest/server.html#data-processing-server

Кроме того, он предоставляет некоторые функции для предварительной обработки данных, такие как масштабирование и вычитание среднего: http://fuel.readthedocs.org/en/latest/overview.html#transformers-apply-some-transformation-on-the-fly

Надеюсь это поможет. Майкл

person Michael Gygli    schedule 27.02.2016