Най-добра практика за обучение на масиви от данни в голям мащаб като ImageNet с помощта на Theano/Lasagne?

Открих, че всички примери за Theano/Lasagne се занимават с малък набор от данни като mnist и cifar10, които могат да бъдат заредени в паметта напълно.

Въпросът ми е как да напиша ефективен код за обучение на големи масиви от данни? По-конкретно, кой е най-добрият начин за подготовка на мини-партиди (включително увеличаване на данните в реално време), за да поддържате графичния процесор зает?

Може би като използването на ImageDataLayer на CAFFE? Например, имам голям txt файл, който съдържа всички пътища и етикети на изображения. Ще бъдем благодарни да покажете някакъв код.

Благодаря ти много!


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


Отговори (1)


В случай, че данните не се побират в паметта, добър начин е да подготвите минипартидите и да ги съхраните в HDF5 файл, който след това да се използва по време на обучение.

Това обаче е достатъчно, когато се извършва увеличаване на данни, тъй като това се прави в движение. Поради глобалното заключване на интерпретатора на Pythons, изображенията не могат вече да бъдат заредени и предварително обработени, докато графичният процесор е зает. Най-добрият начин за това, за който знам, е библиотеката 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