Pytorch: RuntimeError: 减少操作未能同步:cudaErrorAssert:设备端断言触发

我在尝试使用这个数据集训练这个时遇到了以下错误。

由于这是论文中发布的配置,我认为我可能犯了非常严重的错误。

每次尝试运行训练时,这个错误都会在不同的图像上出现。

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

有什么想法吗?


回答:

这种错误通常在使用NLLLossCrossEntropyLoss时发生,并且当你的数据集中有负标签(或标签大于类别数)时也会出现。这正是你遇到的断言错误t >= 0 && t < n_classes失败的情况。

这种情况不会在MSELoss中发生,但原帖提到某处有CrossEntropyLoss,因此错误发生(程序在其他一些行上异步崩溃)。解决方案是清理数据集,确保t >= 0 && t < n_classes得到满足(其中t代表标签)。

此外,如果你使用NLLLossBCELoss,请确保你的网络输出在0到1的范围内(这时你分别需要softmaxsigmoid激活函数)。请注意,对于CrossEntropyLossBCEWithLogitsLoss不需要此操作,因为它们在损失函数内部实现了激活函数。(感谢@PouyaB指出这一点)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注