Вызов cuda () с асинхронным результатом приводит к SyntaxError - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь запустить этот код PyTorch:

for i, (input, target) in enumerate(train_loader):

    input = input.float().cuda(async=True)
    target = target.cuda(async=True)
    input_var = torch.autograd.Variable(input)
    target_var = torch.autograd.Variable(target)

    output = model(input_var)

Но при попытке получить это сообщение об ошибке:

input = input.float().cuda(async=True)
                               ^
SyntaxError: invalid syntax
Process finished with exit code 1

Что я делаю не так? Я уже установил cuda. ​​

1 Ответ

0 голосов
/ 08 ноября 2018

Ваш код не работает, потому что:

  • async - зарезервированное ключевое слово в python, которое не может быть использовано таким образом, поэтому вы получаете SyntaxError

  • cuda() сам по себе также не имеет аргумента async. Конструктор выглядит так:

    cuda ( device = None, non_blocking = False ) → Tensor

Что вы можете сделать:

  • Просто вызов cuda() без аргументов должен работать нормально.

  • Существует два аргумента (device и non_blocking), которые можно использовать для вызова cuda().
    Вы не написали, что хотите сделать, но non_blocking может быть тем, что вы искали:

    • non_blocking (bool):
      Если True и источник находится в закрепленной памяти, копия будет асинхронной по отношению к хосту. В противном случае Аргумент не имеет никакого эффекта. По умолчанию: False.
  • Всегда приятно взглянуть на документацию:
    https://pytorch.org/docs/stable/tensors.html#torch.Tensor.cuda



В качестве дополнения: Если вас интересует, что на самом деле используется async, вы можете посмотреть здесь: https://www.python.org/dev/peps/pep-0492/#new-syntax
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...