拆分k_images为x_train和x_test报错Too many values to unpack如何解决
报错原因及修改方案
你当前使用的(x_train, _), (x_test, _) = k_images解构语法,仅适配Keras内置数据集(如MNIST、CIFAR)的加载返回结构,这类接口会直接返回预先拆分好的(训练集, 训练标签), (测试集, 测试标签)嵌套元组。但你的代码存在两个核心问题:
- 循环内的
k_images是单张jpg读取后生成的三维ndarray(维度为(高度, 宽度, 通道数)),完全不符合上述解构需要的结构,因此触发值数量不匹配的报错 - 你还没有把10张图片汇总为完整的数据集数组,直接对单张图片做拆分没有实际意义
修改步骤
- 先把所有读入的图片汇总为一个完整的数据集数组
- 按比例切分训练集和测试集,可以用
sklearn的拆分工具,也可以手动切片实现
修改后的代码示例:
import glob import matplotlib.pyplot as plt import numpy as np import matplotlib.image as mpimg from sklearn.model_selection import train_test_split # 汇总所有图片到列表 all_images = [] for img_path in glob.glob("F:/Pics/Training_data/*.jpg"): k_images = mpimg.imread(img_path) all_images.append(k_images) # 原有显示逻辑,不需要可以删除 plt.imshow(k_images) plt.show() # 转为numpy格式的总数据集 all_images = np.array(all_images) # 按8:2拆分训练集和测试集,不需要标签就不用额外加占位变量 x_train, x_test = train_test_split(all_images, train_size=0.8, random_state=42) # 不想引入sklearn也可以手动切片拆分,10张图的话前8张训练、后2张测试 # x_train = all_images[:8] # x_test = all_images[8:]
内容的提问来源于stack exchange,提问作者Kartikeya Kawadkar
相关产品推荐
相关产品推荐

