使用torchvision.transforms.Lambda自定义函数时程序卡顿求助
解决CIFAR10带噪声DataLoader迭代卡顿的问题
首先修正噪声添加逻辑(核心错误)
你的my_norm函数完全替换了原始图像数据,既不符合"给图像加噪声"的需求,也可能引发数据加载异常。正确的噪声添加逻辑应该是将噪声叠加到原始图像上,并保持图像像素范围在[0,1](ToTensor()会将图像转为0-1区间的张量):
def add_noise(x): # 生成与原始图像同形状的高斯噪声,控制噪声幅度 noise = 0.1 * torch.randn_like(x) # 叠加噪声后限制在图像有效像素范围 return torch.clamp(x + noise, 0.0, 1.0)
解决DataLoader卡顿的具体调整
调整
num_workers参数
在Jupyter Notebook中,num_workers>0常因子进程管理问题导致卡顿或死锁(尤其Windows系统)。先设置num_workers=0测试:trainloader_noised = torch.utils.data.DataLoader(trainset_noised, batch_size=64, shuffle=False, num_workers=0) testloader_noised = torch.utils.data.DataLoader(testset_noised, batch_size=64, shuffle=False, num_workers=0)若需多进程加载,确保环境支持且
num_workers不超过CPU核心数的一半。优化张量操作效率
用torch.randn_like(x)替代torch.randn(x.shape),它会直接复用输入张量的设备和形状信息,操作更高效。先验证单样本加载
单独测试单个样本的加载逻辑,排除transform函数的问题:sample, label = trainset_noised[0] print(sample.shape, sample.min(), sample.max())若这一步就卡顿,优先排查transform函数逻辑。
清理Jupyter后台资源
暂时关闭代码补全等后台服务,或重启Kernel后重试,避免后台进程占用资源导致加载卡顿。
内容的提问来源于stack exchange,提问作者Knotnet
相关产品推荐
相关产品推荐

