inception-score-pytorch 报错排查实录:图像尺寸、数据格式与显存三大坑一次扫清

📅 2026/8/15 16:56:23
inception-score-pytorch 报错排查实录:图像尺寸、数据格式与显存三大坑一次扫清
inception-score-pytorch 报错排查实录图像尺寸、数据格式与显存三大坑一次扫清【免费下载链接】inception-score-pytorchInception Score for GANs in Pytorch项目地址: https://gitcode.com/gh_mirrors/in/inception-score-pytorchinception-score-pytorch 报错几乎是每个刚接触 GAN 评估的新手都要撞上的第一堵墙。这个基于 Pytorch 的开源工具用预训练 Inception v3 模型给生成图片打分用法极简——核心只有一个inception_score()函数。可正因为简单它对输入的挑剔也常被忽略尺寸差一点、格式错一格、设备没对上报错就扑面而来。这篇文章就按我的真实排错经历把三类高频报错一次讲透。第一步先跑通 Demo给排错定个对照组拿到项目后我建议你先原封不动跑一遍示例拉取仓库后用python inception_score.py直接运行。它会自动下载 CIFAR10、加载预训练模型并打印出分数。这一步能一次性验证三件事依赖装没装齐、模型能否下载、机器有没有可用的 CUDA。Demo 通了说明工具本身没问题后面的报错几乎都出在你的数据上排查范围一下就缩小了。报错一Inception v3 图像尺寸错误299×299 适配两条路报错现场Expected input size (3, 299, 299) but got (3, 64, 64)根因剖析Inception v3 的输入端像一把焊死的 299×299 卡尺多一像素、少一像素都塞不进去。而不少 GAN 默认输出 64×64 或 128×128直接喂进去自然被拒收。简单说模型只认这一个标准相框尺寸不符就得先洗照片。分步解决两条路任选其一在数据侧下手给数据集的 transform 补上transforms.Resize((299, 299))让图片进模型前就长到标准尺寸在调用侧下手调用时传resizeTrue源码会自动用双线性上采样把图放大到 299×299改一个参数即可适合懒人。效果验证重跑后尺寸报错消失Inception 分数正常打印。CIFAR10 这类 32×32 的小图示例代码就是靠resizeTrue撑过来的。报错二批量大小断言失败batch_size 到底该设多大报错现场程序刚启动就抛AssertionError卡死在函数开头。根因剖析源码开头埋着两条硬规矩——assert batch_size 0和assert N batch_size。前者禁止批量大小小于等于 0后者要求数据集样本总数必须大于批量大小。它俩就像电梯的载重限制超一点就直接报警绝不含糊。分步解决把batch_size设成小于数据集总量的正整数即可。数据量大就用 32 起步要是数据集只有几十张图就老实调小到 8 或 16。效果验证断言不再触发循环顺利进入预测阶段一分钱一分货稳。报错三数据格式错误从 Expected 4D tensor 到归一化范围报错现场报Expected 4D tensor或者程序没崩、分数却明显异常比如各类别得分趋同看不出区分度。根因剖析模型期望的输入是一整摞照片的形状(N, 3, H, W)N 是批次里的图片张数。DataLoader 本会自动补上批次维可如果数据集__getitem__返回的是(H, W)灰度图或形状错乱的数组拼接时拼不出四维张量报错就来了。至于分数异常多半是归一化没到位源码注释白纸黑字要求输入落在[-1, 1]区间你要是喂 [0, 255] 的原图相当于给模型上了道非标准口味的菜它只能乱打分。分步解决按清单逐一核对数据集实现__len__和__getitem__单张图返回形状(3, H, W)的torch.Tensor在 transform 末尾补上transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))这一行会把 [0, 1] 的图均匀映射到 [-1, 1]。效果验证四维报错消失分数落在常见量级说明模型终于看懂了你的图。报错四CUDA out of memory 解决方案显存告急的降级三部曲报错现场程序没崩但打印一行WARNING: You have a CUDA device, so you should probably set cudaTrue或者直接崩在CUDA out of memory。根因剖析前者是你明明有 GPU 却默认走了 CPU白瞎了加速能力后者是 299×299 的中间特征图把显存撑爆多见于 batch 过大或显存偏小的机器。分步解决有独立显卡调用时加cudaTrue一条参数开启 GPU 加速显存告急时按梯度降级先调小batch_size还不行就cudaFalse退回 CPU再不行就把大数据集切分成多份分批计算。效果验证警告消失、运行明显提速或显存错误不再出现。排错速查表对号入座一眼定位报错提示问题根源对症下药Expected input size ... but got ...图片不是 299×299Resize 预处理或resizeTrueAssertionErrorbatch_size ≤ 0 或 ≥ 样本数设为小于 N 的正整数Expected 4D tensor缺批次维或数据形状不对确认返回(3, H, W)的 Tensor分数异常未归一化到 [-1, 1]补Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))CUDA WARNING有 GPU 未启用传cudaTrueCUDA out of memory显存不足减 batch、退 CPU、分批计算三步快速排查覆盖九成场景看尺寸确认输入是 299×299或干脆交给resizeTrue看数据核对归一化范围 [-1, 1]、通道在前(3, H, W)、类型是torch.Tensor、数据集两个魔法方法齐全看设备按显卡情况决定cuda取值显存吃紧就主动降级。真遇到上面没覆盖的报错也别慌对照项目里的inception_score.py源码逐行读注释已经把每个参数的语义写得明明白白。想本地复现排错过程可以执行git clone https://gitcode.com/gh_mirrors/in/inception-score-pytorch拉取仓库再参考inception_score.py末尾的 CIFAR10 Demo把数据加载部分替换成自己的数据集即可。工具本身很稳多数问题都出在喂给它的东西上——把尺寸、格式、设备这三关把好你的 GAN 评估之路就走顺了大半。【免费下载链接】inception-score-pytorchInception Score for GANs in Pytorch项目地址: https://gitcode.com/gh_mirrors/in/inception-score-pytorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考