我正在做一些与lottery ticket hypothesis相关的实验。这涉及创建修剪蒙版以将权重蒙版中的某些权重归零。
对于修剪蒙版,我使用布尔矩阵。在每次前向呼叫之前,我将这些矩阵应用于修剪后的权重,如下所示:
self.embed_out.data[~self.embed_out_mask] = 0
其中self
是模型,embed_out
和embed_out_mask
都是torch.nn.Parameter
的实例(。embed_out
是权重矩阵,而{{1} }大小完全相同的相应布尔修剪掩码。
这在训练期间效果很好,并且在收敛,损失等方面均达到了预期结果,与论文的结果相符。
但是,在评估期间,完全相同的行会引发以下错误:
embed_out_mask
失败的相应断言如下:
[stacktrace omitted]
File "[omitted]", line 214, in forward
self.embed_out.data[~self.embed_out_mask] = 0
RuntimeError: copy_if failed to synchronize: device-side assert triggered
这对我来说好像将修剪面罩用作索引存在某种超出范围的错误,但是我手动验证了权重矩阵和修剪面罩的大小完全相同。
此错误可能是什么原因?