Pythorch如何从tens中删除cuda()

2024-04-26 23:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了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)

Tags: inpymodellinetorchembeddingcudafile
3条回答

如果你有张量t。在

t = t.cpu() 

会是老办法。在

^{pr2}$

将是新的API。在

你有一个float张量f,想把它转换成long,你就long_tensor = f.long()

你有cuda张量,也就是说数据在gpu上,想把它移到cpu上你可以做cuda_tensor.cpu()。在

所以要把手电筒浮筒张量A到火炬长做A.long().cpu()

Pythorc0.4.0的最佳实践是编写device agnostic code:也就是说,不使用.cuda()或{},您只需使用^{}

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

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

相关问题 更多 >