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

pytorch如何从张量中移除cuda()

  •  5
  • aerin  · 技术社区  · 7 年前

    我得到了 TypeError: expected torch.LongTensor (got torch.cuda.FloatTensor) .

    如何转换 torch.cuda.FloatTensor torch.LongTensor ?

      Traceback (most recent call last):
      File "train_v2.py", line 110, in <module>
        main()
      File "train_v2.py", line 81, in main
        model.update(batch)
      File "/home/Desktop/squad_vteam/src/model.py", line 131, in update
        loss_adv = self.adversarial_loss(batch, loss, self.network.lexicon_encoder.embedding.weight, y)
      File "/home/Desktop/squad_vteam/src/model.py", line 94, in adversarial_loss
        adv_embedding = torch.LongTensor(adv_embedding)
    TypeError: expected torch.LongTensor (got torch.cuda.FloatTensor)
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Umang Gupta    7 年前

    你有浮子张量 f 想把它转换成long long_tensor = f.long()

    你有 cuda tensor即数据在gpu上,并希望将其移动到cpu上 cuda_tensor.cpu() .

    所以要转换一个torch.cuda.Float张量 A 去火炬。再见 A.long().cpu()

        2
  •  3
  •   Shai    7 年前

    Pytorch 0.4.0的最佳实践是 device agnostic code :也就是说,而不是使用 .cuda() .cpu() 你可以简单地使用 .to(torch.device("cpu"))

    A = A.to(dtype=torch.long, device=torch.device("cpu"))
    

    请注意 .to() 不是“就地”操作(参见,例如。, this answer ),因此您需要分配 A.to(...) 回到 A .

        3
  •  2
  •   prosti    7 年前

    如果你有张量 t .

    t = t.cpu() 
    

    会是老办法。

    t = t.to("cpu")
    

    将会是新的API。