mean [:, None,None]在Pytorch / jupyter中崩溃

时间:2019-09-30 19:21:22

标签: python jupyter-notebook pytorch

我以前有用来构造数据加载器的“ 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])会导致笔记本电脑崩溃。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我的猜测是您的张量是某种整数。在那种情况下, mean std 在Normalize中转换为整数(= 0),这将导致零除。尝试确保要标准化的张量是浮点数。