pytorch .cuda () не может получить тензор к cuda - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь перенести свои данные в gpu, но это не работает;

в моем train.py

if __name__ == '__main__':
ten = torch.FloatTensor(2)
ten = ten.cuda()
print(ten)

args = config()
train_net(args, args.train_net, loss_config=net_loss_config[args.train_net])

при запуске выводит

tensor([0., 0.])

тензор не на cuda

, а в test.py

import torch
ten=torch.FloatTensor(2)
ten=ten.cuda()
print(ten)

, теперь он печатает

tensor([1.4013e-45, 0.0000e+00], device='cuda:0')

сейчас тензор на cuda

1 Ответ

1 голос
/ 28 марта 2020

Ошибка означает, что переменная ten в вашей модели имеет тип torch.FloatTensor (ЦП), в то время как ввод данных для модели имеет тип torch.cuda.FloatTensor (GPU).

Наиболее вероятный Сценарий состоит в том, что у вас есть nn.Parameter или другие модули, такие как nn.Conv2d, определенные в методе __init__() вашей модели, и дополнительные веса или слои, определенные в методе forward() вашей модели.

In в этом случае слои, определенные в методе forward(), не являются модулями модели, и они не будут отображаться в GPU при вызове cuda().

Также необходимо явно добавить параметры в ваш оптимизатор, если вы хотите, чтобы они были обновлены с градиентным спуском.

...