我以前有用来构造数据加载器的“ data_transforms”:
data_transforms_train = transforms.Compose([
transforms.Resize((512, 512)),
transforms.RandomVerticalFlip(),
transforms.RandomHorizontalFlip(),
transforms.ToTensor()
])
一切正常,我可以毫无问题地训练模型。
我决定在转换结束时包括一个标准化步骤:
data_transforms_train = transforms.Compose([
transforms.Resize((512, 512)),
transforms.RandomVerticalFlip(),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.8979], std=[0.3025])
])
开始添加此操作导致笔记本崩溃。换句话说,我没有收到任何python消息错误,但笔记本内核不断崩溃并重新启动。
起初我以为是内存错误,所以我将batch_size更改为1进行验证,但这不是问题。
我尝试检查,因此我一个接一个地应用了转换,并从https://pytorch.org/docs/stable/_modules/torchvision/transforms/functional.html复制了“ to_normalize”源代码
training_set = Dataset(partition['train'], labels, transform=None)
d = transforms.functional.resize(training_set.__getitem__(3)[0], (512,512))
x = transforms.functional.to_tensor(d)
# Normalization code
mean, std = [0.7], [0.3025]
mean, std = torch.as_tensor(mean, dtype=x.dtype, device=x.device), torch.as_tensor(std, dtype=x.dtype, device=x.device)
到目前为止,一切都很好。当我添加此内容时:
tensor.sub_(mean[:, None, None]).div_(std[:, None, None])
笔记本再次崩溃(没有python错误,只有内核崩溃并重新启动)。当我分离零件时,结果表明mean [:, None,None](或std [:, None,None])会导致笔记本电脑崩溃。
有人知道为什么会这样吗?
答案 0 :(得分:0)
我的猜测是您的张量是某种整数。在那种情况下, mean 和 std 在Normalize中转换为整数(= 0),这将导致零除。尝试确保要标准化的张量是浮点数。