PyTorch损失函数评估

时间:2017-11-14 00:38:36

标签: python optimization pytorch

我正在尝试使用fitGPU的加速来优化函数(PyTorch)。这是直接Python代码,我在其中对fit进行评估:

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]。   其中Pfit的维度数,N是每个维度的长度。

     

我知道应避免使用for个循环,因此我尝试使用PyTorchtorch.cuda.FloatTensor进行此操作。

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)))); 
  

不幸的是它不起作用。怎么了?   谢谢!

1 个答案:

答案 0 :(得分:0)

我猜您在下一行遇到尺寸不匹配错误。

e = z - h

在您的示例中,z是一个向量(形状Nx1的2d张量),h是形状NxP的二维张量。因此,您无法直接从h中减去z

您可以执行以下操作以避免尺寸不匹配错误。

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

此处,z.expand(*h.size())会通过复制列向量z次将张量Nx1NxP转换为P形状。