pytorch:Reduce failed to synchronize: device-side assert triggered .

在pytorch中,运行模型经常会出现这个错误,这个bug的来源是BCELoss中输入的张量value的范围必须在[0.0,1.0]之类,而有时候模型的输出是超出这个范畴的,因此BCELoss会报错。可以使用下面的解决这个问题:(强行限制到0-1)

                outputs[outputs < 0.0] = 0.0
                outputs[outputs > 1.0] = 1.0

但是如果你想调试下面这个代码,发现逻辑没有问题,但是仍会出错。原因是try之后,loss = self.criterion(outputs, labels)出错之后,对应的tensor的实际内存已经被释放,outputs只剩下指针,内容被释放,因此不能记录那些出错的数据。

            labels = (self.real_label if is_real else self.fake_label).expand_as(outputs)
            try:
                loss = self.criterion(outputs, labels)
            except RuntimeError:
                file='./error.json'
                with open(file,'a') as f_obj:
                    json.dump([torch.max(outputs.cpu()).detach().numpy().tolist(),torch.min(outputs.cpu()).detach().numpy().tolist()],f_obj)
                outputs[outputs < 0.0] = 0.0
                outputs[outputs > 1.0] = 1.0
                loss = self.criterion(outputs, labels)
                return loss
            else:
                return loss

参考:https://blog.csdn.net/xiaoxifei/article/details/89328596

你可能感兴趣的:(pytorch)