You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:50:32