使用DCGAN训练斯坦福狗狗数据集时张量尺寸不匹配如何解决
错误原因
这个报错是斯坦福狗狗数据集中原始图像宽高比不统一导致的,你当前的数据预处理流程没有将所有图像调整为完全相同的尺寸,因此DataLoader拼接batch时张量维度不匹配,问题出在数据加载的预处理环节,而非训练for循环逻辑。
修复步骤
1. 调整数据变换配置
你可以根据需求选择以下任意一种预处理方案,强制所有输出图像尺寸一致:
- 方案一:强制缩放(实现简单,训练速度快,可能存在轻微图像拉伸)
注意transforms.Resize要传入宽高组成的元组,不要只传单个整数(单个整数仅会将短边缩放到对应长度,长边按原始比例缩放,仍会出现尺寸不一致问题)。示例代码:from torchvision import transforms # DCGAN默认输入尺寸为64*64,可根据需求调整 transform = transforms.Compose([ transforms.Resize((64, 64)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) - 方案二:缩放后裁剪(保留原始图像比例,避免拉伸变形)
先将图像短边缩放到目标尺寸,再裁剪中心区域作为训练输入:transform = transforms.Compose([ transforms.Resize(64), transforms.CenterCrop(64), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ])
2. 验证数据加载逻辑
修改完成后可以先运行以下代码验证输出尺寸是否统一:
from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader # 注意路径对应你存放数据集的./data目录 dataset = ImageFolder(root="./data", transform=transform) dataloader = DataLoader(dataset, batch_size=8, shuffle=True) for imgs, _ in dataloader: print(imgs.shape) break
正常输出应为torch.Size([8, 3, 64, 64]),确认所有样本尺寸一致后即可正常运行训练代码。
内容的提问来源于stack exchange,提问作者AMendis
相关产品推荐
相关产品推荐

