Могу ли я сделать собственные лица с 32bit и numpy? - PullRequest
2 голосов
/ 23 июня 2011

В настоящее время я пытаюсь реализовать собственные грани с помощью numpy, но мне кажется, что это не так с моей 32-битной системой Linux (я использую 32-битную из-за ранее плохой поддержки flash и java в 64-битной версии, мой процессор 64-битный…), потому что при попытке умножить два вектора, чтобы получить матрицу (вектор * транспонированный вектор), numpy дает мне

ValueError: broadcast dimensions too large.

Я прочитал, что это из-за слишком мало памяти и может быть решено с помощью 64-битной. Есть ли способ обойти это? Матрица будет 528000 * 528000 элементов. Согласно моей статье эта большая матрица необходима для ковариационной матрицы (суммируя все эти огромные матрицы и затем деля ее на количество матриц).

Мой фрагмент кода выглядит следующим образом (я не понимаю, почему numpy все равно дает мне матрицу, потому что для моих знаний о матрице он выглядит неправильно (горизонтальный * вертикальный), но он работал с примерами меньшего размера):

tmp = []
for face in faces: # just an array of all face vectors (len = 528000)
    diff = np.subtract(averageFace, face)
    diff = np.asmatrix(diff)
    tmp.append(np.multiply(diff, np.transpose(diff)))
C = np.divide(np.sum(tmp, axis=0), len(tmp))

1 Ответ

2 голосов
/ 23 июня 2011

Как уже уточняется pv, на самом деле практически невозможно осуществить создание такой огромной ковариационной матрицы.

Но учтите, что собственные векторы (объясненные в вашей ссылке drexel ) phi* phi^T и phi^T* phi связаны между собой, и это является ключом к решению проблемы. Подробнее об этой теме читайте в Eigenface .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...