gpt4 book ai didi

python - 如何在 GPU 上从 PyTorch 中的其他两个张量有条件地构造一个张量?

转载 作者:行者123 更新时间:2023-12-04 09:21:49 25 4
gpt4 key购买 nike

一个例子:

import torch

pred = torch.tensor([1,2,1,0,0], device='cuda:0')
correct = torch.tensor([1,0,1,1,0], device='cuda:0')
assigned = torch.tensor([1,2,2,1,0], device='cuda:0')
我要 result = tensor([1,2,1,1,0], device='cuda:0') .
  • 基本上,当 predcorrect 相同然后 correct否则 assigned .
  • 此外,我想从梯度计算中排除这个计算。

  • 有没有办法在不迭代张量的情况下做到这一点?

    最佳答案

    torch.where 完全符合您的要求:

    import torch

    pred = torch.tensor([1,2,1,0,0], device='cuda:0')
    correct = torch.tensor([1,0,1,1,0], device='cuda:0')
    assigned = torch.tensor([1,2,2,1,0], device='cuda:0')

    result = torch.where(pred == correct, correct, assigned)

    print(result)
    # >>> tensor([1, 2, 1, 1, 0], device='cuda:0')
    由于这些张量都没有 requires_grad=True ,不需要做任何事情来避免梯度计算。否则,您可以执行以下操作:
    import torch

    pred = torch.tensor([1.,2.,1.,0.,0.], device='cuda:0')
    correct = torch.tensor([1.,0.,1.,1.,0.], device='cuda:0', requires_grad=True)
    assigned = torch.tensor([1.,2.,2.,1.,0.], device='cuda:0', requires_grad=True)

    with torch.no_grad():
    result = torch.where(pred == correct, correct, assigned)

    print(result)
    # >>> tensor([1, 2, 1, 1, 0], device='cuda:0')
    如果您不使用 torch.no_grad() ,您将拥有:
    result = torch.where(pred == correct, correct, assigned)
    print(result)
    # >>> tensor([1., 2., 1., 1., 0.], device='cuda:0', grad_fn=<SWhereBackward>)
    然后,可以使用以下方法将其与计算图分离:
    result = result.detach()
    print(result)
    # >>> tensor([1., 2., 1., 1., 0.], device='cuda:0')

    关于python - 如何在 GPU 上从 PyTorch 中的其他两个张量有条件地构造一个张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63092529/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com