Reputation: 22634
I got TypeError: expected torch.LongTensor (got torch.cuda.FloatTensor)
.
How do I convert torch.cuda.FloatTensor
to 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)
Upvotes: 8
Views: 10049
Reputation: 46341
If you have a tensor t
.
t = t.cpu()
would be the old way.
t = t.to("cpu")
would be the new API.
Upvotes: 3
Reputation: 114796
Best practice for Pytorch 0.4.0 is to write device agnostic code: That is, instead of using .cuda()
or .cpu()
you can simply use .to(torch.device("cpu"))
A = A.to(dtype=torch.long, device=torch.device("cpu"))
Note that .to()
is not an "in-place" operation (see, e.g., this answer), thus you need to assign A.to(...)
back into A
.
Upvotes: 4
Reputation: 16450
You have a float tensor f
and want to convert it to long, you do long_tensor = f.long()
You have cuda
tensor i.e data is on gpu and want to move it to cpu you can do cuda_tensor.cpu()
.
So to convert a torch.cuda.Float tensor A
to torch.long do A.long().cpu()
Upvotes: 6