2017-11-14 3 views
0

PyTorch에서 GPU의 가속도를 사용하여 함수 (fit)를 최적화하려고합니다.PyTorch 손실 함수 평가

import numpy as np 
... 
for j in range(P): 
    e[:,j] = z - h[:,j]; 
    fit[j] = 1/(sqrt(2*pi)*sigma*N)*np.sum(exp(-(e[:,j]**2)/(2*sigma**2))); 

는 변수의 치수는 : z [NX1, h [NXP, e [NXP, fit [1xP이 난 fit 평가 하 직선 Python 코드이며 ]. 여기서 Pfit의 차원 수이고 N은 각 차원의 길이입니다.

PyTorch에서 torch.cuda.FloatTensor까지 사용하려고 시도한 곳에서 for 루프를 피해야한다는 것을 알고 있습니다.

import torch 
dtype = torch.cuda.FloatTensor 
e  = z - h; 
fit = 1/(torch.sqrt(2*pi)*sigma*N)*torch.sum(torch.exp(-(torch.pw(e,2))/(2*torch.pow(sigma,2)))); 

불행히도 그것은 작동하지 않습니다. 뭐가 잘못 되었 니? 감사합니다.

+0

무엇이 오류 메시지입니까? 항상 오류 정보와 함께 질문을 게시하십시오. 나는'e = z-h' 라인에서 크기 불일치 오류가 발생했다는 것을 알았습니까? 맞습니까? –

+0

죄송합니다. 다음에 오류 메시지를 게시합니다. 네, 맞습니다. – Dirac

답변

1

다음 줄에서 크기가 일치하지 않습니다. 당신의 예에서

e = z - h 

, z는 벡터와 h 모양 NxP의 2 차원 텐서입니다 (모양 Nx1의 2 차원 텐서)입니다. 따라서 직접 hz에서 뺄 수는 없습니다.

크기 불일치 오류를 방지하려면 다음을 수행 할 수 있습니다. 여기

e = z.expand(*h.size()) - h 

, z.expand(*h.size()) 열 벡터를 P 회 복제하여 NxP 형상 Nx1에서 텐서 z 변환한다.

+0

감사합니다. 작동합니다! – Dirac