使用numpy.save()保存训练数据时触发ValueError错误的原因咨询
问题原因与解决方案
错误原因
- 核心问题是Numpy版本迭代带来的行为变化。2017年使用的旧版Numpy(1.16及之前)默认允许将嵌套的异构结构转换为数组并保存,但从1.17版本开始,Numpy对数组的同构性校验更严格,默认不再自动处理这种形状不一致的嵌套数据。
- 你的
training_data每个元素是[screen, output]:screen是480×270的矩阵,output是1×4的列表,两者维度和形状完全不同。当np.save尝试将整个列表转换为numpy数组时,无法生成形状统一的多维数组,因此触发了形状不均的错误。
解决方案
方案1:拆分数据分别保存(推荐)
将图像数据和标签数据拆分为两个独立的同构数组,分别保存,这更符合CNN训练的数据组织逻辑,后续加载和使用也更高效:
# 提取所有图像和标签 screens = np.array([item[0] for item in training_data]) outputs = np.array([item[1] for item in training_data]) # 分别保存为npy文件 np.save('training_screens.npy', screens) np.save('training_outputs.npy', outputs)
方案2:强制保存异构数组
如果需要将数据保存在同一个文件中,可以手动指定dtype=object创建异构数组后再保存:
# 转换为object类型的异构数组 training_array = np.array(training_data, dtype=object) # 保存 np.save('training_data.npy', training_array)
注意:加载后的数据是object类型数组,使用时需要手动处理内部元素的类型,且处理效率低于拆分保存的方式。
内容的提问来源于stack exchange,提问作者foxconn
相关产品推荐
相关产品推荐

