Pytorch: RuntimeError: уменьшить не удалось синхронизировать: cudaErrorAssert: инициировано утверждение на стороне устройства - PullRequest
2 голосов
/ 02 февраля 2020

Я сталкиваюсь со следующей ошибкой при попытке обучить этот на этот набор данных .

Поскольку это конфигурация, опубликованная в статье, я предполагаю, Я делаю что-то невероятно неправильно.

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

C:/w/1/s/windows/pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:106: block: [0,0,0], thread: [6,0,0] Assertion `t >= 0 && t < n_classes` failed.
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1741, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Noam/Code/vision_course/hopenet/deep-head-pose/code/original_code_augmented/train_hopenet_with_validation_holdout.py", line 187, in <module>
    loss_reg_yaw = reg_criterion(yaw_predicted, label_yaw_cont)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\modules\module.py", line 541, in __call__
    result = self.forward(*input, **kwargs)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\modules\loss.py", line 431, in forward
    return F.mse_loss(input, target, reduction=self.reduction)
  File "C:\Noam\Code\vision_course\hopenet\venv\lib\site-packages\torch\nn\functional.py", line 2204, in mse_loss
    ret = torch._C._nn.mse_loss(expanded_input, expanded_target, _Reduction.get_enum(reduction))
RuntimeError: reduce failed to synchronize: cudaErrorAssert: device-side assert triggered

Есть идеи?

1 Ответ

4 голосов
/ 06 февраля 2020

Этот тип ошибки обычно возникает при использовании NLLLoss или CrossEntropyLoss, а также когда у вашего набора данных есть отрицательные метки (или метки, превышающие количество классов). Это также точная ошибка, которую вы получаете Утверждение t >= 0 && t < n_classes не удалось.

Это не произойдет для MSELoss, но в OP упоминается, что где-то есть CrossEntropyLoss, и, таким образом, возникает ошибка (программа аварийно завершает работу в другой строке). Решение состоит в том, чтобы очистить набор данных и убедиться, что t >= 0 && t < n_classes удовлетворено (где t представляет метку).

Кроме того, убедитесь, что выход вашей сети находится в диапазоне от 0 до 1, если вы используете NLLLoss или BCELoss (тогда вам требуется активация softmax или sigmoid соответственно). Обратите внимание, что это не требуется для CrossEntropyLoss или BCEWithLogitsLoss, поскольку они реализуют функцию активации внутри функции потерь. (Спасибо @PouyaB за указание).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...