我正在尝试使用fit
中GPU
的加速来优化函数(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]。 其中P
是fit
的维度数,N
是每个维度的长度。我知道应避免使用
for
个循环,因此我尝试使用PyTorch
到torch.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))));
不幸的是它不起作用。怎么了? 谢谢!
答案 0 :(得分:0)
我猜您在下一行遇到尺寸不匹配错误。
e = z - h
在您的示例中,z
是一个向量(形状Nx1
的2d张量),h
是形状NxP
的二维张量。因此,您无法直接从h
中减去z
。
您可以执行以下操作以避免尺寸不匹配错误。
e = z.expand(*h.size()) - h
此处,z.expand(*h.size())
会通过复制列向量z
次将张量Nx1
从NxP
转换为P
形状。