我正在研究以下代码来识别人脸:
def clasificaImagen(numVS, numEntre, I):
if numVS > 70: # No puede haber mas de 400 valores singulares
numVS = 70;
if numEntre > 76: # Queremos al menos 100 imagenes de prueba
numEntre = 76;
# Importamos las imagenes
personajes = np.array([144,109,200,121,200,77]);
persuma=np.array([0,144,253,453,574,774,851]);
# Declaramos nuestras variables
E = []; #np.mat(4096, numEntre, 6); %zeros(4096, numEntre, 6);
U = []; #np.mat(4096, numEntre, 6); %zeros(6,1);
Uk = []; #cell(4096, numVS, 6); %zeros(6, 1);
aciertos = 0;
pruebas = sum(personajes)-(numEntre*6);
pguess = 0; # El digito que el programa asigna a cada imagen
# Calculamos las matrices de entrenamiento para cada digito
print 'Generando conjuntos de entrenamiento';
for j in range(0,6):
# E(j) tiene dimension 76 x numEntre
E.append(I[:, persuma[j]+1:persuma[j]+numEntre]);
# U(j) tiene dimension 76 x 76
u, S, V = np.linalg.svd(E[j]);
U.append(u);
# Uk(j) tiene dimension 76 x numVS
uk = U[j];
uk = uk[:, 1:numVS];
Uk.append(uk);
type(Uk[1])
print 'Clasificando imagenes';
for i in range(0,6):
rMin = 9999999;
P = I[:, persuma[i]+1+numEntre:persuma[i+1]];
for h in range(0,(personajes[i] - numEntre)-1):
z = P[:, h];
for j in range(0,6):
ukMult = Uk[j]*Uk[j].T;
ukMult = ukMult*z;
ukMult = z - ukMult;
res = np.linalg.norm(ukMult);
if res < rMin:
pguess = j - 1;
rMin = res;
if pguess == i-1:
aciertos = aciertos + 1;
print 'Calculando porcentaje de aciertos';
return 100*aciertos/pruebas;
问题就在这条线上:
^{pr2}$发生什么事了?代码的注释是用西班牙语写的,但是我想看看是否有人能解释一下矩阵乘法的问题。如果有必要,我可以用英语发表评论。在
我认为乘法定义得很好,因为它只是矩阵及其转置的乘积,所以应该不会有任何问题。在
使用
np.dot(Uk[j]*Uk[j].T)
也没用。在
当呼叫纽比.dot()函数,它需要两个参数,而不是上面所示的一个。试试这样的方法:
文件在这里:http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html
他们列出的例子如下:
^{pr2}$同时查看numpy.matrix公司类:http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.matrix.html
相关问题 更多 >
编程相关推荐