在MRI切片数据集上训练深度神经网络时出现值解包不足报错如何解决
报错原因及解决方法
你遇到的not enough values to unpack报错和图像存放在同一个文件夹没有直接关系,是两处代码逻辑错误导致的:
- glob匹配规则错误:你写的路径
C:\\Users\\adam\\Downloads\\MRI_Images\\.png缺少通配符*,只会匹配名为.png的文件,正常情况下匹配不到任何png图像,导致images是空列表,自然无法拆出4个变量。 - 拆包逻辑不符合自定义数据集加载逻辑:
(X_train_full, y_train_full), (X_test, y_test) = 某变量这种写法是Keras加载官方内置数据集(如MNIST、CIFAR)的专用写法,官方数据集已经提前完成了标签关联、训练集测试集划分,返回的就是固定嵌套结构。你自己读取本地图像得到的images只是一个存储所有图像数组的一维列表,既没有关联标签,也没有完成数据集划分,不可能直接拆出训练集、训练标签、测试集、测试标签四个对象。
修复步骤
- 第一步:修正图像读取代码,补全通配符,可补充有效性校验过滤读取失败的图像:
# 补全*匹配所有后缀为.png的文件 image_paths = glob.glob("C:\\Users\\adam\\Downloads\\MRI_Images\\*.png") images = [] for path in image_paths: img = cv2.imread(path) # cv2读取失败会返回None,过滤无效图像 if img is not None: # 可选:cv2默认读取为BGR通道,训练需要RGB的话执行转换 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) images.append(img)
- 第二步:关联图像对应标签。你需要根据自己数据集的标注规则提取标签,常见规则有两种:
- 标签存储在csv文件中,和图像文件名一一对应,可通过pandas读取csv匹配文件名获取标签
- 图像按类别存放在不同子文件夹中,子文件夹名称即为标签,可遍历子文件夹读取图像同时提取标签
- 第三步:完成数据集划分。拿到所有图像数组列表
X和对应标签列表y后,使用数据集划分工具拆分:
from sklearn.model_selection import train_test_split # test_size设置测试集占比,random_state固定随机种子保证可复现 X_train_full, X_test, y_train_full, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
内容的提问来源于stack exchange,提问作者Adamwilliam
相关产品推荐
相关产品推荐

