2013-06-26 7 views
1

Я разработал программу обработки изображений, которая идентифицирует то, что цифре присваивается образ чисел. Каждое изображение было 27x27 пикселей = 729 пикселей. Я беру каждое значение R, G и B, что означает, что у меня есть 2187 переменных из каждого изображения (+1 для перехвата = всего 2188).как обрабатывать большое количество функций машинное обучение

Я использовал формулу ниже градиентного спуска:

Repeat { 
    θj = θj−α/m∑(hθ(x)−y)xj 
} 

Где θj является коэффициент по переменной J; α - скорость обучения; hθ(x) - гипотеза; y - действительная величина, а xj - значение переменной j. m - количество обучающих наборов. hθ(x), y предназначены для каждого набора тренировок (т. Е. Для этого является знак суммирования). Далее гипотеза определяется как:

hθ(x) = 1/(1+ e^-z) 
z= θo + θ1X1+θ2X2 +θ3X3...θnXn 

С этим и 3000 учебных изображений, я был в состоянии обучать свою программу в течение чуть более часа и при испытании на поперечном наборе проверки, он был в состоянии определить правильный изображение ~ 67% времени.

Я хотел улучшить, что таким образом я решил попытаться полином степени 2.

Однако число переменных подскакивает от 2188 до 2,394,766 на изображение! Мне требуется час, чтобы сделать 1 шаг градиентного спуска.

Итак, мой вопрос в том, как это огромное количество переменных обрабатывается машинным обучением? С одной стороны, у меня недостаточно места, чтобы даже удерживать столько переменных для каждого набора тренировок. С другой стороны, я в настоящее время храню 2188 переменных на один образец обучения, но мне нужно выполнить O (n^2), чтобы получить значения каждой переменной, умноженной на другую переменную (то есть значения полинома до степени 2).

Так что любые предложения/советы приветствуются.

+0

Вы должны взглянуть на стохастические (мини-партии) градиентного спуска по этому вопросу. –

ответ

1
  • пытается использовать некоторое снижение размерности первым (PCA, ядро ​​PCA, или LDA, если вы классификацию изображений)

  • векторизовать ваш градиентный спуск - с большинством математических библиотек или в MATLAB и т.д., это будет работать намного быстрее

  • распараллелить алгоритм, а затем запустить в на нескольких процессорах (но, возможно, ваша библиотека для умножения векторов уже поддерживает параллельные вычисления)

Смежные вопросы