代码之家  ›  专栏  ›  技术社区  ›  user8130503

将常量变量添加到cuda。浮动张量

  •  1
  • user8130503  · 技术社区  · 7 年前

    我有两个问题:

    1) 我想知道我该怎么做 加/减恒常火炬。对于火炬的所有元素,大小为1的浮动张量。大小为30的浮点张量。

    2) 我怎么能 将焊枪的每个元素相乘。通过随机值(每个值不同或不同)浮动大小为30的张量。

    我的代码:

    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 变成一个 torch.FloatTensor 30码,但我怎么做? 我试图创建一个向量:

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

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

    运行时错误:张量大小不一致

    谢谢大家的帮助!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Wasi Ahmad    7 年前

    1) 如何加/减一个恒定的火炬。火炬所有元素的大小为1的浮动张量。大小为30的浮点张量?

    您可以在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的张量?

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