【问题标题】:pytorch how to remove cuda() from tensorpytorch 如何从张量中删除 cuda()
【发布时间】:2019-01-10 20:23:07
【问题描述】:

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

【问题讨论】:

  • 如何加载或创建model?在加载/创建时使模型及其属性与 CPU 兼容(与 cuda/GPU 兼容)可能是有意义的

标签: python type-conversion pytorch tensor


【解决方案1】:

如果你有张量 t.

t = t.cpu() 

将是旧方式。

t = t.to("cpu")

将是新的 API。

【讨论】:

  • 虽然在 1.0 中两者都有效
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您有一个浮点张量 f 并想将其转换为 long,您可以使用 long_tensor = f.long()

    你有cuda张量,即数据在gpu上,想把它移动到cpu你可以cuda_tensor.cpu()

    所以要将 torch.cuda.Float 张量 A 转换为 torch.long 做 A.long().cpu()

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 2020-07-09
      • 2020-10-21
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多