我有两个问题:
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:张量大小不一致
谢谢大家的帮助!
答案 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)