将常量变量添加到cuda.FloatTensor

时间:2017-11-13 21:30:36

标签: gpu pytorch

我有两个问题:

  

1)我想知道如何将大小为1的constante torch.FloatTensor加到/减去一个大小为30的火炬.FloatTensor的所有元素。

     

2)我如何将一个大小为30的torch.FloatTensor的每个元素乘以一个随机值(不同或不同)。

我的代码:

import torch
dtype = torch.cuda.FloatTensor 
def main():
     pop, xmax, xmin   = 30, 5, -5
     x                 = (xmax-xmin)*torch.rand(pop).type(dtype)+xmin
     y                 = torch.pow(x, 2)
     [miny, indexmin]  = y.min(0)
     gxbest            = x[indexmin] 
     pxbest            = x
     pybest            = y
     v = torch.rand(pop)
     vnext = torch.rand()*v + torch.rand()*(pxbest - x) + torch.rand()*(gxbest - x)

main()

最好的方法是什么?我想我应该如何将gxbest转换为30的torch.FloatTensor,但我该怎么办呢? 我尝试创建一个向量:

  

Variable(torch.from_numpy(np.ones(pop)))*gxbest

但它没有用。乘法也不起作用。

RuntimeError:张量大小不一致

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

  

1)如何将大小为1的恒定torch.FloatTensor添加/减去大小为30的torch.FloatTensor的所有元素?

你可以直接在pytorch 0.2。

中完成
import torch

a = torch.randn(30)
b = torch.randn(1)
print(a-b)

如果由于尺寸不匹配而导致任何错误,您可以进行如下的小改动。

print(a-b.expand(a.size(0))) # to make both a and b tensor of same shape
  

2)如何将大小为30的torch.FloatTensor的每个元素乘以一个随机值(不同或不同)?

在pytorch 0.2中,你也可以直接进行。

import torch

a = torch.randn(30)
b = torch.randn(1)
print(a*b)

如果由于尺寸不匹配而出现错误,请执行以下操作。

print(a*b.expand(a.size(0)))

因此,在您的情况下,您可以简单地将gxbest张量的大小从1更改为30,如下所示。

gxbest = gxbest.expand(30)